作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我有一个分配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;
}
top
命令,即使多次运行该程序后,可用内存也不会减少多达256 MB。
calloc
而不是
malloc
,则存在巨大差异:
p = calloc(256 * 1024 * 1024, 1);
malloc
不会更改可用内存,而
calloc
会更改?
最佳答案
malloc()
不使用内存。它分配它。
分配内存后,通过分配一些数据来使用它。
size_t Size = 256 * 1024 * 1024;
p = malloc(Size);
if (p != NULL) {
memset(p, 123, Size);
}
malloc()
的方式是,直到访问该字节(或更可能是字节组或字节的“页”中的某个字节)时,才会发生物理内存消耗。
calloc()
可能会也可能不会真正使用内存。系统可以将大量内存映射到同一物理归零内存,至少直到数据变得有趣为止。看到
关于c - 为什么malloc不“用完”计算机上的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56608557/
我是一名优秀的程序员,十分优秀!