gpt4 book ai didi

c - 为什么malloc不“用完”计算机上的内存?

转载 作者:行者123 更新时间:2023-11-30 16:16:23 26 4
gpt4 key购买 nike

因此,我有一个分配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()可能会也可能不会真正使用内存。系统可以将大量内存映射到同一物理归零内存,至少直到数据变得有趣为止。看到
Why malloc+memset is slower than calloc?

关于c - 为什么malloc不“用完”计算机上的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56608557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com