现在,我正在学习C语言的基础,并且在使用函数malloc
和calloc
进行内存分配时遇到了一些问题。特别是,我编写了以下程序来探索使用malloc
函数可以分配多少RAM:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int N;
scanf("%d", &N);
char* A = malloc(N);
if (A == NULL)
{
printf("Not enough memory. Exit...\n");
exit(1);
}
for (int i; i<N; ++i)
A[i] = i;
printf("Array successfully created!\n");
return 0;
}
然后,我使用不同的N值尝试了该程序。通常,我的笔记本电脑具有6 GB的RAM,因此我期望最大接受N约为6 * 10 ^ 9。但是,对于某些值,例如1 * 10 ^ 11(100 GB),输出为Array successfully created!
,对于其他值(例如2 * 10 ^ 10),输出为Not enough memory. Exit...
,因此在我看来有点随机。之后,我将malloc(N)
替换为calloc(N,1)
,并尝试了该版本的程序,但结果是相同的。另外,我使用gcc -g3 -fsanitize=address
编译了这两个程序,并且在成功执行的情况下,始终显示出数组*A
分配的内存部分总是比N
小得多。 / p>
所以,我的问题是,在某些情况下,malloc / calloc如何“分配”更多的RAM,而不是实际可能的?如果重要的话,我有一个基于Ubuntu的操作系统。谢谢。