c - C 中大型二维数组导致的段错误

标签 c arrays memory memory-management

下面的代码是由解析的 SIZE 参数生成的,在这种情况下,您在任何地方看到“2512555”都是解析的 SIZE 参数。我遇到的问题是数组太大并导致段错误。

有没有办法在不改变 SIZE 参数的情况下克服段错误?该参数的范围是 0 - 400,000。

#include <stdio.h>
#include <stdlib.h>

double templ25_mem1[2512555][2512555];

int main() 
{
  int templ25_mem1_index1=0;
  int templ25_mem1_index2=0;

    for(templ25_mem1_index1; templ25_mem1_index1 < 2512555; templ25_mem1_index1++)
    {
      for(templ25_mem1_index2; templ25_mem1_index2 < 2512555; templ25_mem1_index2++)
      {
            int rndRow = rand() % 2512555;
            int rndCol = rand() % 2512555;

            templ25_mem1[rndRow][rndCol] = 0x7FFFFFFF;
            templ25_mem1[rndRow][rndCol];    
      }
    }
}

最佳答案

要在不更改 SIZE 参数的情况下克服段错误,当大小如此大时,您需要重新设计数据结构。

例如,您可以将这个巨大的数组放在一个临时文件中,您可以在其中将各个部分交换到主内存中。您可能还需要两级寻址,因为您必须确保可以对磁盘上的数组进行寻址(45TB 大于可用地址空间,并且可能大于最大的 int)。

最好的方法是再次检查需求,看看它们是否真的需要这么大的数组,或者是否允许其他方法来实现其目标。

关于c - C 中大型二维数组导致的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49366017/

相关文章:

c - 如何将 double 组写入文件?

c - 我应该使用哪些字符串操作函数?

C将数组索引分配给另一个

c - 在 C 中实现拼写检查器 : Valgrind reports memory errors

c - C中的char数组。如何找到有效输入的实际长度?

java - 如何在 Activity 之间传递 int 数组?

c++ - 将文件读入数组

c++ - 为结构体动态分配内存

python - Pandas 和多处理内存管理 : Splitting a DataFrame into Multiple Chunks

C:创建AVL平衡树