0

这个问题是对为什么 malloc() 或 new 从不返回 NULL的后续问题?和SIGKILL 在 C++ 中分配内存时

从那里的答案中,我可以理解为什么程序在尝试写入由malloc. 但是,在使用calloc(在 SLC 和 Ubuntu 上)时,我看到了同样的问题:

程序没有返回空指针,而是 SIGKILLed,因此检查 的返回值calloc是徒劳的。但是calloc不应该受到“overcommit feature”的影响吗?(除非是靠malloc幕后……)

4

1 回答 1

1

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

于 2014-06-25T09:15:00.980 回答