我试图递归地细分一个球体,以在面上实现球面小波算法。虽然我有8 GB的可用内存,但我仅限于9个二分体的细分级别。我的问题是在构建我的球体时缺少内存和bad_alloc异常,即使我有足够的内存可用。
我认为对于Win32应用程序我会达到4 GB的限制,因为我的可寻址内存指针会耗尽。但是你可以看到我达到了大约1.9 GB的极限。
此错误与使用的系统无关。
有人知道发生了什么以及如何处理这类问题吗?
答案 0 :(得分:3)
您永远无法获得4GB的分配,因为这是32位进程的整个可用内存空间。这包括代码和其他数据,其中有一些支持(例如)运行时库和堆栈,即使您的可执行文件不分配其他块。
在Windows上,只有将二进制文件与LARGEADDRESSAWARE标志相关联,才能获得超过2GB的分配。 MSDN文档中有简要的解释性信息。
通过将应用程序构建为64位可执行文件,可以避免此限制,假设您只能定位64位Windows计算机。
对于给定的Windows版本here,内存限制的背景更多。如果您遇到32位,PAE可能会有用。