这个问题是对为什么 malloc() 或 new 从不返回 NULL的后续问题?和SIGKILL 在 C++ 中分配内存时:
从那里的答案中,我可以理解为什么程序在尝试写入由malloc
. 但是,在使用calloc
(在 SLC 和 Ubuntu 上)时,我看到了同样的问题:
程序没有返回空指针,而是 SIGKILLed,因此检查 的返回值calloc
是徒劳的。但是calloc
不应该受到“overcommit feature”的影响吗?(除非是靠malloc
幕后……)
这个问题是对为什么 malloc() 或 new 从不返回 NULL的后续问题?和SIGKILL 在 C++ 中分配内存时:
从那里的答案中,我可以理解为什么程序在尝试写入由malloc
. 但是,在使用calloc
(在 SLC 和 Ubuntu 上)时,我看到了同样的问题:
程序没有返回空指针,而是 SIGKILLed,因此检查 的返回值calloc
是徒劳的。但是calloc
不应该受到“overcommit feature”的影响吗?(除非是靠malloc
幕后……)
从proc /proc/sys/vm/overcommit_memory
部分
当前在系统上分配的内存量。提交的内存是进程分配的所有内存的总和,即使它还没有被它们“使用”。分配 1GB 内存的进程(使用
malloc(3)
或类似),但仅触及 300MB 的内存只会显示为使用 300MB 的内存,即使它具有为整个 1GB 分配的地址空间。这 1GB 是 VM 已“承诺”使用的内存,可随时由分配应用程序使用。在系统上启用严格过量使用(模式 2 /proc/sys/vm/overcommit_memory)后,将不允许超过 CommitLimit(如上详述)的分配。如果需要保证在成功分配内存后进程不会因内存不足而失败,这将非常有用。
虽然 onlymalloc
明确列出,但它确实说相似,calloc
(和realloc
)是相似的。它与这个问题有同样的问题malloc
。