如何在C中声明和使用10亿个整数的庞大数组?

sem*_*teu 14 c memory-management

我正在实现一个顺序程序,像quicksort一样进行排序.我想用大量的1或10亿个整数来测试我的程序的性能.但问题是由于数组的大小,我得到了分段错误.

此数组声明的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000000000

int main(int argc, char **argv)
{
  int list[N], i;
  srand(time(NULL));
  for(i=0; i<N; i++)
     list[i] = rand()%1000;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我有一个使用mmap函数的命题.但我不知道如何使用它?任何人都可以帮我使用它吗?

我正在研究Ubuntu 10.04 64位,gcc 4.4.3版.

谢谢你的回复.

Mic*_*gan 11

您必须使用malloc此类分配.堆栈上的那么多几乎每次都会失败.

int *list;

list = malloc(N * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

这会将分配放在堆上有更多可用内存的地方.

  • 并且N*sizeof(int)很可能在32位计算机上溢出. (4认同)

nmi*_*els 10

迈克尔是对的,你不能在堆栈上适应那么多.但是,如果您不想使用malloc,可以将其设置为全局(或静态).

#include <stdlib.h>
#include <time.h>
#define N 1000000000
static int list[N];

int main(int argc, char **argv)
{
  size_t i;
  srand(time(NULL));
  for(i=0; i<N; i++)
     list[i] = rand()%1000;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)