我遇到malloc
次来电时遇到的奇怪问题。我正在研究一个程序,它使用巨大的数组(GBs中的大小),并在尝试使用malloc
为阵列分配内存时我发现malloc
即使我分配的是更大的大小也是成功的比我的RAM(64GB)。
见下面的代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define Sixteen_G 16000000000
int main() {
int *c = (int *)malloc(sizeof(int)*Sixteen_G);
int *d = (int *)malloc(sizeof(int)*Sixteen_G);
int *e = (int *)malloc(sizeof(int)*Sixteen_G);
int *f = (int *)malloc(sizeof(int)*Sixteen_G);
int *g = (int *)malloc(sizeof(int)*Sixteen_G);
if(c == NULL)
printf("c Allocation failed\n");
if(d == NULL)
printf("d Allocation failed\n");
if(e == NULL)
printf("e Allocation failed\n");
if(f == NULL)
printf("e Allocation failed\n");
if(g == NULL)
printf("e Allocation failed\n");
else
printf("All arrays allocated\n");
return 0;
}
上述代码的输出是:
All arrays allocated
同样,对大小为malloc
的{{1}}的一次调用失败,但多次调用>= 17GB
正在通过。
有人可以解释为什么malloc能够分配那么多内存,当我的系统RAM大小只有64GB时,以及16GB
对单个/多个呼叫的准确程度
答案 0 :(得分:4)
您可能想要停用memory overcommitment。
(我真的不喜欢这个功能)
请参阅this问题。
您应该编码并test against malloc
failure。
详细了解virtual address space。另请参阅this。