所以我有這個程序分配256 MB的內存,並在用戶按下ENTER鍵後釋放內存並終止。爲什麼malloc不「在電腦上」使用「內存?
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *p, s[2];
p = malloc(256 * 1024 * 1024);
if (p == NULL)
exit(1);
printf("Allocated");
fgets(s, 2, stdin);
free(p);
return 0;
}
我跑了這個程序多次,並將它們中的每一個都後臺運行,直到沒有足夠的內存可以分配爲止。但是,那從來沒有發生過。我運行了一個linux的top
命令,甚至在多次運行這個程序後,可用內存永遠不會下降近256MB。
然而,在另一方面,如果我用calloc
,而不是malloc
然後有一個巨大的差別:
p = calloc(256 * 1024 * 1024, 1);
現在,如果我運行程序和背景,然後重複,每次我運行它,可用內存降低256 MB。爲什麼是這樣?爲什麼malloc
不會導致可用內存變化,但calloc
呢?
通過strace運行程序,並查看它的功能。 (我希望_both_版本可以匿名mmap/dev/zero,BTW) – wildplasser
它被稱爲「懶惰分配」。 HTTP://計算器。com/questions/712683/what-is-lazy-allocation – jaeheung
簡而言之,過於簡單的答案是,由於你實際上並沒有使用'malloc'中的內存,所以計算機並不需要實際給你。不過,使用'calloc',需要使用內存(用於清零部分),因此計算機實際上需要爲您提供所有內容。 –