您是否将其声明为函数或方法中的局部变量?如果是这样,那就是经典的堆栈溢出。对于 VS2010,请参阅http://msdn.microsoft.com/en-us/library/8cxs58a6%28v=vs.100%29.aspx
保留值指定虚拟内存中的总堆栈分配。对于 x86 和 x64 机器,默认堆栈大小为 1 MB。在 Itanium 芯片组上,默认大小为 4 MB。
因此,一个 1024x1024 的浮点数组(假设每个浮点 4 个字节)以高达 4mb 的速度进入 - 你已经通过了这里的默认堆栈限制。
请注意,即使您确实有一个 Itanium,您也无法使用所有 4mb - 例如,参数也需要存储在堆栈中,请参阅http://www.csee.umbc。 edu/~chang/cs313.s02/stack.shtml
现在,您可以只增加堆栈大小,但有一天您将需要使用更大的数组,所以这是一场您不会赢的消耗战。这个问题最好通过让它消失来解决;换句话说,而不是:
float stuff[1024 * 1024];
您将其声明为:
float *stuff = new float[1024 * 1024];
// do something interesting and useful with stuff
delete[] stuff;
现在将在堆上分配,而不是在堆栈上。请注意,这与 Robert Harvey 在他的回答中提到的堆不同;您在这里没有 /HEAP 选项的限制。