C/C++中非常大的静态数组的算术运算

phy*_*ist 6 c c++ arrays stack static

我是新手,High Performance Computing也是我在这个论坛上的第一个问题,我长期以来一直是读者.

基本上我需要对非常大的数组进行算术运算

double variable [9][4][300][300][300] (uninitialized)
Run Code Online (Sandbox Code Playgroud)

情况1:如果我声明上面的数组local/automatic然后我得到运行时错误如果我编译没有优化 " g++ file.cpp"..(错误是分段错误 - 堆栈溢出???)

情况2:如果我使用优化进行编译,则与上述情况相同,代码按预期运行."g++ -O2 file.cpP"(是arraybss现在???)

情况3:如果我创建变量,global/static那么它编译得很好,但是它不会运行,只是killed在终端上给出一条消息" "并终止.

没有真正的问题,但我很好奇,想要了解声明超大型数组时会发生什么,以及它们根据数据类型驻留在内存中的位置.

我也知道使用malloc或new在运行时生成这些数组的方法.然后当然会在堆上.

所以对我来说最重要的问题是 - >这是在编译g++和运行时处理大型数组时最有效的方法(即计算内存中数组时的最小运行时间)linux clusters.

感谢您耐心等待阅读.

Som*_*ude 7

无论优化标志如何,局部变量总是在堆栈上.那个阵列大概是7千兆字节!比任何可能的堆栈大的方式.

大小也可能是它无法启动的原因,就好像你把它作为全局/静态变量一样,那么你需要有超过7 GB或虚拟内存空闲连续的才能加载程序.

  • @physicist Stack与BSS对比DATA与堆不是"速度"的一个因素.特别是因为无论如何它都将被放入CPU缓存中. (3认同)
  • 除非变量被优化掉,否则它无处可去. (2认同)
  • @physicist:虽然这些大型数据结构不是程序员的首选,但如果你需要它们,那么堆的设计就是为了让它工作.OTOH自动变量和全局变量不是为支持如此大的尺寸而设计的. (2认同)