也许它是从平台到平台不同的,但是为什么malloc在gcc中将值初始化为0?
当我使用gcc编译并运行下面的代码时,我每次都在我的ubuntu 11.10中得到0。
#include <stdio.h>
#include <stdlib.h>
int main()
{
double *a = (double*) malloc(sizeof(double)*100)
printf("%f", *a);
}
为什么malloc的行为就像这样,即使有calloc?
这是否意味着即使您不希望它有时会将值初始化为0,也会产生不必要的性能开销?编辑:哦,我以前的例子不是开始,但恰巧使用“新鲜”块。
我正是一直在寻找是为什么当它分配一个大块它初始化:
int main()
{
int *a = (int*) malloc(sizeof(int)*200000);
a[10] = 3;
printf("%d", *(a+10));
free(a);
a = (double*) malloc(sizeof(double)*200000);
printf("%d", *(a+10));
}
OUTPUT: 3
0 (initialized)
但感谢指出有mallocing当安全理由! (从来没有想过)。当分配新块或大块时,必须将其初始化为零。
为了更真实的测试,你尝试过分配,释放,然后重新分配(可能每个多次重复)?仅仅因为malloc第一次返回零初始化的内存并不意味着你可以一般地指望它。 – user786653
它也可能是内存被操作系统设置为0,或者'malloc'与它无关。 –
[出于安全原因,不要在C中输入'malloc'的结果(http://stackoverflow.com/q/605845/995714) –