bad_alloc即使我有很多可用的内存

时间:2017-02-15 13:26:38

标签: c++ bad-alloc

我试图递归地细分一个球体,以在面上实现球面小波算法。虽然我有8 GB的可用内存,但我仅限于9个二分体的细分级别。我的问题是在构建我的球体时缺少内存和bad_alloc异常,即使我有足够的内存可用。

我认为对于Win32应用程序我会达到4 GB的限制,因为我的可寻址内存指针会耗尽。但是你可以看到我达到了大约1.9 GB的极限。

此错误与使用的系统无关。

Out of Memory (Screenshot)

有人知道发生了什么以及如何处理这类问题吗?

1 个答案:

答案 0 :(得分:3)

您永远无法获得4GB的分配,因为这是32位进程的整个可用内存空间。这包括代码和其他数据,其中有一些支持(例如)运行时库和堆栈,即使您的可执行文件不分配其他块。

在Windows上,只有将二进制文件与LARGEADDRESSAWARE标志相关联,才能获得超过2GB的分配。 MSDN文档中有简要的解释性信息。

通过将应用程序构建为64位可执行文件,可以避免此限制,假设您只能定位64位Windows计算机。

对于给定的Windows版本here,内存限制的背景更多。如果您遇到32位,PAE可能会有用。