加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:39:53 所属栏目:百科 来源:网络整理
导读:我是高性能计算的新手,也是我在这个论坛上的第一个问题,我长期以来一直是读者. 基本上我需要对非常大的数组进行算术运算 double variable [9][4][300][300][300] (uninitialized) 情况1:如果我将上面的数组声明为本地/自动,那么如果我编译时没有像“g file.
我是高性能计算的新手,也是我在这个论坛上的第一个问题,我长期以来一直是读者.

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

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或虚拟内存空闲且连续的才能加载程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读