【发布时间】:2011-12-23 04:41:26
【问题描述】:
可能平台不同,但是
当我使用 gcc 编译并运行下面的代码时,我每次在我的 ubuntu 11.10 中都得到 0。
#include <stdio.h>
#include <stdlib.h>
int main()
{
double *a = malloc(sizeof(double)*100)
printf("%f", *a);
}
为什么即使有calloc,malloc的行为也会如此?
这是否意味着即使您有时不希望将值初始化为 0 也会产生不必要的性能开销?
编辑:哦,我之前的例子不是初始化,而是碰巧使用了“新鲜”块。
我正在寻找的是为什么它在分配一个大块时初始化它:
int main()
{
int *a = malloc(sizeof(int)*200000);
a[10] = 3;
printf("%d", *(a+10));
free(a);
a = malloc(sizeof(double)*200000);
printf("%d", *(a+10));
}
OUTPUT: 3
0 (initialized)
但感谢您指出 malloc 时有安全原因! (从来没有想过)。当然在分配新块或大块时它必须初始化为零。
【问题讨论】:
-
为了更真实的测试,您是否尝试过分配、释放然后再次分配(可能每次都重复多次)?仅仅因为 malloc 第一次返回零初始化内存并不意味着您可以指望它。
-
也有可能是内存被操作系统设置为0什么的和
malloc无关。