Malloc和calloc似乎比RAM分配更多的内存

时间:2019-10-22 23:52:58

标签: c memory-management malloc allocation calloc

现在,我正在学习C语言的基础,并且在使用函数malloccalloc进行内存分配时遇到了一些问题。特别是,我编写了以下程序来探索使用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的操作系统。谢谢。

0 个答案:

没有答案