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

前端之家收集整理的这篇文章主要介绍了C/C++中非常大的静态数组的算术运算前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是高性能计算的新手,也是我在这个论坛上的第一个问题,我长期以来一直是读者.

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

double variable [9][4][300][300][300] (uninitialized)

情况1:如果我将上面的数组声明为本地/自动,那么如果我编译时没有像“g file.cpp”这样的优化,我会得到运行时错误..(错误是分段错误 – 堆栈溢出???)

情况2:如果我使用优化进行编译,则与上述情况相同,代码按预期运行. “g -O2 file.cpp”(现在是bss中的数组???)

情况3:如果我将变量设置为global / static,那么它编译得很好,但是它不会运行,只是在终端上发出“kill”消息并终止.

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

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

所以对我来说最重要的问题是 – >这是在使用g进行编译并在linux集群上运行时处理大型数组的最有效方法(即计算内存中数组时的最小运行时间).

感谢您耐心等待阅读.

解决方法

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

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

原文链接:https://www.f2er.com/c/110661.html

猜你在找的C&C++相关文章