为什么malloc没有“用完”计算机上的内存?
因此,我有一个分配256 MB内存的程序,在用户按下ENTER键后,它将释放内存并终止。
#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
命令,即使在多次运行该程序之后,可用内存也不会减少多达256 MB。
但是,另一方面,如果我使用calloc
而不是malloc
则存在巨大差异:
p = calloc(256 * 1024 * 1024, 1);
现在,如果我运行该程序并使其后台运行,然后重复执行,则每次运行它时,可用内存都会减少256
MB。为什么是这样?为什么不malloc
导致可用的可用内存改变,但是calloc
为什么呢?
回答:
malloc()
它 不 使用内存。它分配它。
分配内存后,通过分配一些数据来使用它。
size_t Size = 256 * 1024 * 1024;p = malloc(Size);
if (p != NULL) {
memset(p, 123, Size);
}
某些平台实现malloc()
的方式是,直到访问该字节(或更可能是字节组或字节的“页”中的一个字节)时才发生物理上的内存消耗。
calloc()
可能会也可能不会真正 使用 内存。系统可以 将 大量内存 _映射_到相同的物理归零内存,至少直到数据变得有趣为止。
以上是 为什么malloc没有“用完”计算机上的内存? 的全部内容, 来源链接: utcz.com/qa/400034.html