当我运行一个继续分配内存的进程时,为什么Linux Free命令没有显示较少的可用内存

1 linux memory malloc free-command

我编写了一个C程序,在其中我使用malloc连续分配内存(1 MB大小).我不释放这段记忆.当这个程序运行时,我调用linux free命令,并期望使用的内存应该逐渐增加,内存空闲应该减少.但这并不期望.Free命令输出几乎保持不变.知道为什么使用malloc分配的内存没有显示在使用的内存中?

cni*_*tar 5

当你打电话给malloc它时,从内核请求内存(通过sbrkmmap),操作系统只是随便给它内存,而不是实际为进程分配它.这是一种乐观的策略; 实际上操作系统"希望"这个过程永远不会使用内存.

当进程最终从内存中写入(或读取)时,它会出现故障并且操作系统会说"确实很好,如果你坚持"并实际分配内存.

你可以通过逐渐写入内存来看到这一点:

char *mem = malloc(PAGE_SIZE * 100);
for (i = 0; i < 100; ++i) {
    getchar();
    mem[PAGE_SIZE * i] = 42;
}
Run Code Online (Sandbox Code Playgroud)

这样做的一个副作用是您可以轻松地分配malloc比系统更多的内存.通过写信,你最终会达到极限,你的过程将被杀死.