我目前正在编写一个程序,我需要运行许多模拟,速度是游戏的名称。我目前正在使用一个分配在堆上的长线性数组并自己计算尺寸并直接从我计算出的索引中提取。一位同事编写了一个类似的程序,并通过使用 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/