【发布时间】:2012-08-12 04:01:59
【问题描述】:
我读到 malloc 实际上分配了 (required_size + 1) 个内存块,它将大小存储在第一个块中,并返回指向第二个块的指针。这样 free() 就知道要释放多少内存。所以,我写了一个小代码来输出这个大小。
int *p = (int *)malloc(100*sizeof(int));
printf("size = %d\n",p[-1]);
由于我为 100 个整数分配空间,我希望大小为 400。但输出为 409。50 个整数的输出为 209,1000 个整数的输出为 4009。有人可以解释为什么输出关闭9 个字节?
【问题讨论】:
-
这是未定义的行为和实现相关的。
-
如果您告诉我们您正在使用的编译器版本、您的架构以及您对 malloc 的特定实现,我们可能会给您一些答案。
-
这是一个有趣的假设,我希望您只是出于好奇而不是试图在任何地方使用它。在我的 amd64 系统上,用
size_t替换int后,我得到817(与800要求相比);但计数越小,数字或多或少都会减少。 -
是的..只是出于好奇才问的。实际上我已经使用这个网站 ideone.com 来运行这个代码。我没有检查过其他编译器。
标签: c memory-management malloc heap-memory free