![将 /proc/sys/vm/overcommit_memory 设置为 1,然后耗尽地址](https://linux22.com/image/1285268/%E5%B0%86%20%2Fproc%2Fsys%2Fvm%2Fovercommit_memory%20%E8%AE%BE%E7%BD%AE%E4%B8%BA%201%EF%BC%8C%E7%84%B6%E5%90%8E%E8%80%97%E5%B0%BD%E5%9C%B0%E5%9D%80.png)
据我了解,将 /proc/sys/vm/overcommit_memory 设置为 1 是为了确保 malloc 始终成功,并且如果存在实际内存问题,则释放 OOM killer。
我想知道当您分配了太多内存,导致进程的地址空间耗尽时会发生什么?尽管设置了 overcommit_memory,它是否仍返回 NULL,或者您的进程是否收到信号?还是完全是其他情况?
答案1
Malloc 应该返回无效的并设置错误码如果数据段用尽(即使启用了过量提交)。
请参阅系统调用手册布雷克(2). Malloc 调用 brk 来扩展数据段。如果扩展段因任何原因失败,brk 会失败并将 errno 设置为 ENOMEM。