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
中的设置进入游戏的位置。)