c - 如何在 C 中声明和使用包含 10 亿个整数的巨大数组?

标签 c memory-management

我正在实现一个顺序程序,用于像快速排序一样进行排序。我想在一个包含 1 或 100 亿个整数的庞大数组中测试我的程序的性能。 但问题是由于数组的大小,我得到了一个段错误。

声明该数组的示例代码:

#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;
}

我得到了使用 mmap 函数的建议。但是不知道怎么用?谁能帮我使用它?

我正在使用 Ubuntu 10.04 64 位,gcc 版本 4.4.3。

感谢您的回复。

最佳答案

Michael 是对的,你不能在堆栈中放那么多。但是,如果您不想对其进行 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;
}

关于c - 如何在 C 中声明和使用包含 10 亿个整数的巨大数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3771154/

相关文章:

c# - 是否有执行 WPF/C# 对象取消引用以进行垃圾回收的好方法?

iphone - 内存泄漏 - 应用程序退出并显示信号 9

c++ - 跨 DLL 的内存/堆管理

c - 如何声明一个不透明的结构指针接口(interface)

c - Linux C,打开一个存在的文件,EEXIST错误bug

php - 如何将神经网络从 C 语言转换为 PHP

cocoa-touch - iOS 应用程序启动时占用近 40mb

c - C中通过void函数初始化指向结构体的指针

c - malloc 一个函数指针数组

c++ - 将指针复制到分配的内存