gpt4 book ai didi

c++ - 为什么 malloc() 或 new 从不返回 NULL?

转载 作者:IT老高 更新时间:2023-10-28 22:10:00 26 4
gpt4 key购买 nike

我正在编写一个应用程序,它需要大量内存用于缓存,正如我所描述的他 here .现在我正在玩一些 malloc/new 结构来弄清楚我如何实现它。我做了一个奇怪的观察:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
while(1) {
char *foo = (char*)malloc(1024);// new char[1024];
if(foo == NULL) {
printf("Couldn't alloc\n");
fflush(stdout);
return 0;
}
}
return 0;
}

为什么永远无法到达 printf?如果我的系统内存不足,则据说 malloc 返回 NULL,如 here 所解释的那样。 .但我总是收到 SIGKILL(我正在使用 linux...)。

最佳答案

默认情况下,Linux 通常使用机会性内存分配方案,这意味着内核会给你一个有效地址,直到第一次使用才会分配。

见:

根据这些响应,您可以使用 echo 2 >/proc/sys/vm/overcommit_memory 关闭此功能。

据我所知,这是在假设您不一定会使用您分配的所有内存的情况下完成的。我不能说我个人曾经分配过至少一次不接触的空间,所以我很想知道这会如何影响现实生活中的表现......

关于 SIGKILL 失败,您调用的每个 malloc 仍在为每个调用分配一些内存。最终,您可能会用 malloc 开销填充您的内存,从而引起内存不足终止功能的愤怒。是否仅此一个问题,或者过量使用策略是否仍然分配了所请求空间的一部分,这是一个很好的问题。

关于c++ - 为什么 malloc() 或 new 从不返回 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16674370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com