Vin*_*tor 3 c++ memory arrays visual-studio-2010
我试图声明1024 x 1024浮点数组,但是弹出一个窗口说project_name.exe已经停止工作...有选项是调试还是关闭程序.以前,我成功地通过2个int数组声明1000.我有点搜索互联网可能的原因,他们说它的内存相关问题,"堆栈/堆溢出"的确切.他们说,浮动的情况更糟.
我只需要最多5或6位小数.
有什么建议或意见吗?我没有在python或matlab中遇到这个问题.我正在使用Microsoft Visual Studio 2010.
小智 12
您是否将此声明为函数或方法中的局部变量?如果是这样,那就是经典的堆栈溢出.对于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 /〜昌/ cs313.s02/stack.shtml
现在,你可以增加堆栈大小,但有一天你需要使用更大的阵列,所以这是一场消耗战,你不会赢.这个问题最好通过让它消失来解决; 换句话说,而不是:
float stuff[1024 * 1024];
Run Code Online (Sandbox Code Playgroud)
你声明它:
float *stuff = new float[1024 * 1024];
// do something interesting and useful with stuff
delete[] stuff;
Run Code Online (Sandbox Code Playgroud)
现在将在堆上分配,而不是在堆栈上.请注意,这不是同一个堆作为由罗伯特·哈维在他的回答中提到; 你没有这里的/ HEAP选项的限制.
| 归档时间: |
|
| 查看次数: |
1536 次 |
| 最近记录: |