声明大数组时堆栈/堆溢出
Stack/heap overflow when declaring a large array
我试图声明一个1024乘1024的浮点数组,但刚刚弹出一个窗口,显示project_name.exe已停止工作。。。带有调试或关闭程序的选项。以前,我成功地声明了1000乘2 int数组。我在互联网上搜索过可能的原因,他们说这是与内存相关的问题,确切地说是"堆栈/堆溢出"。他们说,浮动的情况更糟。
我只需要小数点后5或6位。
有什么建议吗?我在python和matlab中都没有遇到这个问题。我正在使用Microsoft Visual Studio 2010。
是否将其声明为函数或方法中的局部变量?如果是这样,那就是典型的堆栈溢出。有关VS2010,请参阅http://msdn.microsoft.com/en-us/library/8cxs58a6%28v=vs.100%29.aspx
保留值指定虚拟内存中的总堆栈分配。对于x86和x64计算机,默认堆栈大小为1 MB。在安腾芯片组上,默认大小为4 MB。
因此,一个1024x1024的浮点数组(假设每个浮点有4个字节)的时钟频率高达4mb——您已经突破了默认的堆栈限制。
请注意,即使您有安腾,也不能使用所有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选项的限制。
您可能在堆栈上声明了这一点吗?这么大的物体必须堆起来!
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- C++ 对象数组堆栈溢出
- 有没有一种方法可以捕获进程中的堆栈溢出?C++Linux
- 对象接收堆栈溢出异常 c++ 的排序向量
- 将公共递归转换为尾递归,因为大型输入的堆栈溢出
- C++ 中递归期间的堆栈溢出
- 启动 dll 时 C# 环境堆栈溢出
- 在C++中使用数组时如何防止堆栈溢出?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 当我尝试为结构分配新指针时出现堆栈溢出错误
- 为什么析构函数无休止地调用自己(导致堆栈溢出)?
- 为什么堆栈溢出?如有建议,不胜感激
- 主函数执行时C++堆栈溢出异常
- 如何在不导致堆栈溢出的情况下计算非常大的数字和很小的 HCF.我正在使用欧几里得算法
- 递归克隆图时的堆栈溢出
- 防止 CRTP 特征码在"pure virtual"调用中堆栈溢出
- 分配大型静态 std::unordered_map 会导致堆栈溢出
- 静态数组溢出堆栈(seg 错误 11)仅在类定义内部时,否则不会..?
- 使用递归的溢出堆栈