我写了一个 C 程序,我在其中使用 malloc 连续分配内存(1 MB 大小)。我不释放这段内存。当这个程序正在运行时,我调用了 linux free 命令并期望,使用的内存应该逐渐增加,而 Memory free 应该减少。但这并不期望。 Free 命令输出几乎保持不变。 知道为什么使用 malloc 分配的内存没有显示在使用的内存中吗?
最佳答案
当您调用 malloc
时,它依次从内核请求内存(通过 sbrk
或 mmap
),而操作系统只是随便给它内存,而不实际为进程分配它。这是一个乐观的策略;实际上,操作系统“希望”进程永远不会使用内存。
当进程最终从内存中写入(或读取)时,它会出错并且操作系统说“好的,如果你坚持的话”并实际分配内存。
你可以通过逐渐写入内存来看到这一点:
char *mem = malloc(PAGE_SIZE * 100);
for (i = 0; i < 100; ++i) {
getchar();
mem[PAGE_SIZE * i] = 42;
}
这样做的一个副作用是您可以使用 malloc
轻松分配比系统分配更多的内存。通过写入它,您最终会达到极限,您的进程将被终止。
关于linux - 为什么当我运行一个不断分配内存的进程时,Linux Free 命令没有显示更少的可用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22318314/