我有一個關於我的代碼的簡短問題。我已經創建了兩種情況或用於測試的示例。C內存免費混淆
例1:
char *arr[1000000];
int i = 0;
for (; i < 1000000; i++){
char *c = (char *) calloc(1, sizeof(char) * 10);
free(c);
}
例2:
char *arr[1000000];
int i = 0;
for (; i < 1000000; i++){
char *c = (char *) calloc(1, sizeof(char) * 10);
arr[i] = c;
free(arr[i]);
arr[i] = NULL;
}
在實施例中的型動物:將在陣列free'ing存儲器之前。
當我運行例如1這是免費的所有內存。當我運行示例2時,它不釋放所有內存。 我已經搜查,但看不出來。
爲什麼是實施例2不同,則實施例1的結果?
我的常識告訴我,例如1和2應該導致同樣的,但在實踐中並非如此。我使用linux top來檢查內存使用情況。
你怎麼知道它不釋放所有內存? – EricSchaefer
你是如何推斷第二個例子沒有釋放所有內存的? – Joe
你檢查了什麼?過程的RSS? – wildplasser