SIGKILL使用calloc在C ++中分配内存

时间:2014-06-25 08:52:10

标签: memory-management calloc sigkill

此问题是Why does malloc() or new never return NULL?SIGKILL while allocating memory in C++的后续行动:

从那里的答案我可以理解为什么一个程序会在尝试写入内存时被杀死,这是成功的"由malloc分配。但是,在使用calloc(在SLC和Ubuntu上)时,我看到同样的问题:

程序是SIGKILLed,而不是返回空指针,因此检查calloc的返回值是徒劳的。但calloc不应受"过度使用功能的影响"? (除非它依赖于malloc幕后......)

1 个答案:

答案 0 :(得分:1)

来自proc /proc/sys/vm/overcommit_memory部分

  

目前在系统上分配的内存量。提交的内存是进程分配的所有内存的总和,即使它没有被使用"到目前为止。一个分配1GB内存的进程(使用malloc(3)或类似的),但只触及300MB的内存只会显示为使用300MB的内存,即使它有分配的地址空间整个1GB。这个1GB的内存已被承诺"由VM分配,可以在任何时候由分配应用程序使用。在系统上启用严格过度使用(模式2 / proc / sys / vm / overcommit_memory)时,将不允许超过CommitLimit(上面详述)的分配。如果需要保证在成功分配内存后由于内存不足而导致进程不会失败,这非常有用。

虽然仅明确列出了malloc,但它确实说类似calloc(和realloc)是类似。它与此问题的问题与malloc相同。