我编写了以下C++代码。它是用MinGW (来自msys)在Windows 8上编译的。如果我运行它,Windows将停止它并给出堆栈溢出错误(C00000FD)。有什么问题吗?
#include <iostream>
using namespace std;
class Test{
public:
int txt[1000];
};
int main(){
Test a[1000];
return 0;
}如果我想存储一张1920年*1080大小的图片,我该怎么办?它将是1920*1080*4字节。
发布于 2014-11-10 16:55:07
每个Test对象包含1000个整数,可能以每个大约4kb的速度计时。
主要而言,您正在创建一个由1000个对象组成的数组,总共为4MB。你的堆栈不能容纳4兆。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms686774%28v=vs.85%29.aspx说一个常见的缺省值是1MB。
请注意,
std::vector<Test> a(1000);很可能还能正常工作。std::vector不像本地数组那样将其内容存储在堆栈上。
发布于 2014-11-10 16:54:31
我相信Windows中的默认堆栈大小是1MB。当您分配1000^2个it时(每个it都有4个字节大),您将尝试将更多的信息放在堆栈上,使其无法容纳。
发布于 2014-11-10 16:56:16
Test对象的大小至少为4000字节(取决于平台的int大小)。您正在尝试创建一个由1000个Test对象组成的数组,该数组将为4,000,000字节或近4MB。这几乎肯定超过了程序的默认堆栈大小。您可能会使用一些编译器选项来更改这一点,但问题应该是您想要做什么呢?
您应该将大型对象存储在堆上而不是堆栈上。
实际上,您可以根据MinGW中的this answer使用以下选项更改默认堆栈大小
gcc -Wl,--stack,N但是,更好的做法是不要将大型对象存储在堆栈上。
https://stackoverflow.com/questions/26848812
复制相似问题