【发布时间】:2019-09-07 02:32:17
【问题描述】:
我正在阅读“专家 C 编程”一书,但这里的代码确实让我感到困惑。看不懂函数 malloc 的使用和这里返回的值,为什么运行这个会返回进程中分配的内存? 提前致谢。
#include<stdio.h>
#include<stdlib.h>
main()
{
int MB = 0;
while(malloc(1<<20)) ++MB;
printf("Allocated %d MB total\n",MB);
}
【问题讨论】:
-
运行直到
malloc()返回NULL,同时像筛子一样泄漏内存。目的可能是衡量一个程序可以分配多少内存,但取决于操作系统和 malloc 实现,这可能非常不准确,甚至是万能的无限循环。 -
那本书写于 1994 年。从那以后发生了很多变化。试着找一本最近 10 年内写的书。
-
它运行了三分钟,然后操作系统立即将其杀死,可能是因为它使用了“太多”内存。根据其他证据,它似乎已经实现了大约 64800000 MB 的虚拟地址大小(也就是说,它通过循环进行了 64800000 次,称为
malloc64800000 次),并且消耗了大约 40% 的机器内存。所以,是的,同意 user3386109 的观点,这个特定的实验可能不再那么有用了。 -
@steve: linux,对吧?搜索“乐观内存分配”。 “分配”的内存无关紧要,但 malloc 的内部数据结构和内核的页表是真实的。
-
要么那个盒子要么他的盒子有 64T 的 RAM....
:)