c++ - 为什么我的5维大数组只作为一个成员变量会引发栈溢出异常?

标签 c++ arrays stack-overflow

我目前正在编写一个程序,我需要运行许多模拟,速度是游戏的名称。我目前正在使用一个分配在堆上的长线性数组并自己计算尺寸并直接从我计算出的索引中提取。一位同事编写了一个类似的程序,并通过使用 5 维数组获得了很好的速度提升。我知道将其分配为 vector 非常容易,但据我所知,由于边界检查,使用 vector 会产生速度成本。

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

编译并运行良好:

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

int main()
{
  return 0;
}

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

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

int main()
{
  Foo foo;
  return 0;
}

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

最佳答案

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

关于c++ - 为什么我的5维大数组只作为一个成员变量会引发栈溢出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7633029/

相关文章:

android - 来自 glUniform1i 的无法解释的 GL_INVALID_OPERATION(OpenGL 认为 int 是 float?)

c++ - std::map::iterator 是否返回值的拷贝或值本身?

ios - 将列表的字符串转换为列表 Swift

javascript - 将嵌套的 Javascript 对象属性推送到多个数组中

c# - 关闭表单时的 StackOverflow

c++ - 删除标准列表中的指针对象

c++ - qmake : Build library without the symlinks and 'lib' prefix

ios - 在 CSV 文件的新行中添加新数据

c++ bufferoverflow 执行顺序

c++ - 将 shared_ptr 用于 linked_list 在析构函数中给出 stackoverflow