为什么我的大型5D数组仅导致堆栈溢出异常作为成员变量?

TVO*_*OHM 0 c++ stack-overflow arrays

我正在编写一个程序,我需要运行许多模拟,速度是游戏的名称.我目前正在使用在堆上分配的一个长线性数组并自己计算尺寸并直接从我编制的索引中提取.一位同事编写了一个类似的程序,并且使用5D阵列提高了速度.我知道将它作为向量分配会非常容易,但据我所知,由于边界检查使用向量会产生速度成本.

我的问题是为什么会发生这种情况?

这编译并运行良好:

int Array[20][20][20][20][20];

int main()
{
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会编译但在包装在类中时抛出堆栈溢出异常:

class Foo
{
  int Array[20][20][20][20][20];
};

int main()
{
  Foo foo;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我尝试在Visual Studio 2005链接器选项中修改我的堆栈大小以及更改"启用更大地址"选项,但似乎没有任何区别.

Pup*_*ppy 7

静态数组将直接映射到内存中,而不是映射到堆栈中.成员变量将在堆栈上分配,默认情况下可能不够大.此外,vector不进行任何检查operator[].