linux - 为什么当我运行一个不断分配内存的进程时,Linux Free 命令没有显示更少的可用内存

标签 linux memory malloc free-command

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

最佳答案

当您调用 malloc 时,它依次从内核请求内存(通过 sbrkmmap),而操作系统只是随便给它内存,而不实际为进程分配它。这是一个乐观的策略;实际上,操作系统“希望”进程永远不会使用内存。

当进程最终从内存中写入(或读取)时,它会出错并且操作系统说“好的,如果你坚持的话”并实际分配内存。

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

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/

相关文章:

linux - 访问远程服务器上的导出变量

linux - 内核调度程序中的 CFS 和 FIFO

c - 局部变量分配在哪里?堆还是栈?

c++ - realloc 调用会引入多少开销?

python - 在 Linux 上使用 Python 进行视频捕获的最佳库是什么?

linux - 如何提取符号并查看它们在文件中的偏移量

android - 我的Android应用程序如何扫描自己的内存映射以查找已知的不良关键字,例如“Xposed”或“Frida”?

c - 通过动态分配从函数到另一个函数的数组 (C)

c - 如何在 C 中使用单个 malloc 分配三角数组?

c++ - 如何获取使用 malloc() 分配的内存块的大小?