【发布时间】:2014-06-25 08:52:09
【问题描述】:
这个问题是Why does malloc() or new never return NULL?和SIGKILL while allocating memory in C++的后续问题:
从那里的答案我可以理解为什么程序在尝试写入由malloc“成功”分配的内存时会被杀死。但是,在使用 calloc(在 SLC 和 Ubuntu 上)时,我看到了同样的问题:
程序不是返回一个空指针,而是SIGKILLed,所以检查calloc的返回值是徒劳的。但是calloc 应该不会受到“overcommit 特性”的影响吧? (除非它在幕后依赖malloc...)
【问题讨论】:
-
您为什么认为
calloc不会依赖malloc?当然,它必须 - 但自然实现显然是作为malloc的薄包装。 -
我没想到。它不必,即使知道它确实如此,它也可能不允许
malloc返回没有由“真实”内存备份的内存。 (这取决于/proc/sys/vm/overcommit_memory中的设置在游戏中的位置。)
标签: memory-management calloc sigkill