据我了解,将 /proc/sys/vm/overcommit_memory 设置为 1 是为了确保 malloc 始终成功,并且如果存在实际内存问题,则释放 OOM killer。
我想知道当您分配了太多内存,导致进程的地址空间耗尽时会发生什么?尽管设置了 overcommit_memory,它是否仍返回 NULL,或者您的进程是否收到信号?还是完全是其他情况?
答案1
Malloc 应该返回无效的并设置错误码如果数据段用尽(即使启用了过量提交)。
请参阅系统调用手册布雷克(2). Malloc 调用 brk 来扩展数据段。如果扩展段因任何原因失败,brk 会失败并将 errno 设置为 ENOMEM。