平台之间可能有所不同,但是
当我使用gcc编译并运行下面的代码时,每次在ubuntu 11.10中获得0。
#include <stdio.h>
#include <stdlib.h>
int main()
{
double *a = (double*) malloc(sizeof(double)*100)
printf("%f", *a);
}
为什么即使有calloc,malloc的行为也是如此?
难道就意味着即使您不希望有时将值初始化为0,也会有不必要的性能开销吗?
编辑:哦,我以前的示例不是initiazling,而是碰巧使用“新鲜”块。
我恰好在寻找的是为什么它在分配一个大块时将其初始化:
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)
但是感谢您指出在分配时有一个安全原因!(从未考虑过)。确保在分配新鲜块或大块时必须将其初始化为零。