Memory management 在C+中分配内存时执行SIGKILL+;使用calloc

Memory management 在C+中分配内存时执行SIGKILL+;使用calloc,memory-management,calloc,sigkill,Memory Management,Calloc,Sigkill,这个问题是对以下问题的后续行动: 从这些答案中,我可以理解为什么一个程序在试图写入malloc所“成功”分配的内存时会被终止。但是,在使用calloc(在SLC和Ubuntu上)时,我看到了同样的问题: 程序不是返回空指针,而是sigkill,因此检查calloc的返回值是徒劳的。但是calloc不应该受到“过度限制特性”的影响吗?(除非它依赖于malloc幕后…来自/proc/sys/vm/overmit\u memory部分 系统上当前分配的内存量。提交的内存是进程分配的所有内存的总和,即使

这个问题是对以下问题的后续行动:

从这些答案中,我可以理解为什么一个程序在试图写入
malloc
所“成功”分配的内存时会被终止。但是,在使用
calloc
(在SLC和Ubuntu上)时,我看到了同样的问题:

程序不是返回空指针,而是sigkill,因此检查
calloc
的返回值是徒劳的。但是
calloc
不应该受到“过度限制特性”的影响吗?(除非它依赖于
malloc
幕后…

来自
/proc/sys/vm/overmit\u memory
部分

系统上当前分配的内存量。提交的内存是进程分配的所有内存的总和,即使到目前为止还没有被进程“使用”。分配1GB内存的进程(使用
malloc(3)
或类似的),但仅涉及300MB内存的进程将仅显示为使用300MB内存,即使它为整个1GB分配了地址空间。这个1GB内存已经被VM“提交”到,并且可以在任何时候被分配的应用程序使用。如果在系统上启用了严格的过度分配(模式2/proc/sys/vm/overmit_memory),则不允许分配超过提交限制(如上所述)。如果需要保证在成功分配内存后,进程不会因内存不足而失败,则这一点非常有用


虽然只有
malloc
被明确列出,但它确实表示相似
calloc
(和
realloc
)是相似。在这个问题上,它与
malloc
有着相同的问题。

Hm,实际上它似乎是这样的:为什么你会认为
calloc
不会依赖
malloc
?当然不必这样做,但是自然的实现显然是作为
malloc
的一个薄包装器。它不必这样做,即使知道这样做了,它也可能不允许
malloc
返回没有“真实”内存备份的内存。(这取决于
/proc/sys/vm/overmit_memory
中的设置进入游戏的位置。)