也許它是從平臺到平臺不同的,但是爲什麼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) –