【发布时间】:2014-07-17 11:51:01
【问题描述】:
我正在尝试运行一个涉及大量计算和值的模拟。
我遇到了一个问题,即大型数组会导致程序在声明任何变量之前崩溃。我不确定这是由于我的代码还是由于我的操作系统拒绝运行程序。
导致程序崩溃的代码是:
long double adsorption[2][4][5][10001]
这个数组应该使用大约 10^6 字节,而 SIZE_MAX 是 10^19,所以我很困惑它为什么会崩溃。 (任务管理器中的程序是 64 位的)
我在具有 12 Gb 内存的 Windows 7 64 位上运行,其中 10 Gb 通常是免费的。编译器是 MinGW-w64
抱歉,如果这是非常基本的,我来自物理背景,不是编码!
干杯
【问题讨论】:
-
堆栈(大多数编译器在其上放置局部变量)通常有一个位数的可用兆字节数。例如,在 Windows 上,它通常是一个单兆字节,而如果
long double是 80 位,那么您的数组等至少是 400 万字节(几乎 4 MB),如果long double是 128 位,则远远超过 6 MB . -
如果你把它声明为一个局部变量,那么它通常会被分配到栈上,栈的大小是有限的,所以你会得到一个栈溢出。
-
你能解释一下为什么你有这么多维度的数组,也许我们可以提供一个更好的选择。当前答案提到
malloc,但很可能 2 x 4 x 5 x 10001 数组不是最好的方法。还有long double?我认为从来没有需要