c - 以下代码段中动态分配了多少字节?

标签 c byte dynamic-memory-allocation

假设一个内存地址占4个字节,一个char占1个字节:

char** t;
t = malloc(5 * sizeof(char*));
int i;
for (i = 0; i < 5; i++)
 t[i] = malloc(sizeof(char) * (i+1));

最佳答案

至少大约 35 字节——但是 malloc 的典型实现将具有它支持的一些最小分配大小,因此实际上,您可以预期它使用的内存比这更多(尽管具体多少会有所不同)。

在典型情况下,最小分配大约为 16 甚至 32 字节,在这种情况下,您在上面指定的大部分大小实际上没有任何区别——最后 5 个分配将全部是最小值恰好是。在典型情况下,大于该值的尺寸也将四舍五入为 2 的下一个幂。

这将为您的第一个分配分配 32 个字节,为其他五个分配分配 16 个或 32 个字节(即支持的最小大小),总共 112 个或 192 个字节。

关于c - 以下代码段中动态分配了多少字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3840598/

相关文章:

c - 零初始化全局数据的位置

java - 将文件内容读取为字节 java

c - 读取 argv[] 中的原始字节

c - 从 csv 文件读取和动态内存分配

c - 有序二叉树插入

c - 在 C 中使用 qsort 对 float 组进行排序

c - Valgrind - 无法理解错误输出

java - 位数组到字节 - java

C:如果直到运行时才知道大小,我如何初始化全局数组?

C++:动态增长二维数组