bad_alloc 尽管我有很多可用内存
bad_alloc even though I have lots of memory available
我正在尝试递归地细分球体以在面上实现球面小波算法。虽然我有 8 GB 的可用内存,但我只能将二十面体细分为 9 个级别。我的问题是在构建我的球体时内存不足和 bad_alloc 异常,即使我有足够的内存可用。
我认为我会达到 4 GB 的 Win32 应用程序限制,因为我会 运行 超出可寻址内存指针。但是正如您所见,我达到了大约 1.9 GB 的限制。
此错误与使用的系统无关。
Out of Memory (Screenshot)
有人知道发生了什么事以及如何处理这种问题吗?
您将永远无法分配 4GB,因为这是 32 位进程的全部可用内存 space。这包括代码和其他数据,其中将有一些支持(例如)运行时库和堆栈,即使您的可执行文件没有分配其他块。
在 Windows 上,仅通过将二进制文件与 LARGEADDRESSAWARE 标志链接,您可以获得超过 2GB 的分配。 MSDN 文档中有简短的说明信息。
可以通过将您的应用构建为 64 位可执行文件来避免此限制,前提是您只能针对 64 位 Windows 机器。
给定的 Windows 版本 here 有更多关于内存限制的背景信息。如果您坚持使用 32 位,PAE 可能会有用。
我正在尝试递归地细分球体以在面上实现球面小波算法。虽然我有 8 GB 的可用内存,但我只能将二十面体细分为 9 个级别。我的问题是在构建我的球体时内存不足和 bad_alloc 异常,即使我有足够的内存可用。
我认为我会达到 4 GB 的 Win32 应用程序限制,因为我会 运行 超出可寻址内存指针。但是正如您所见,我达到了大约 1.9 GB 的限制。
此错误与使用的系统无关。
Out of Memory (Screenshot)
有人知道发生了什么事以及如何处理这种问题吗?
您将永远无法分配 4GB,因为这是 32 位进程的全部可用内存 space。这包括代码和其他数据,其中将有一些支持(例如)运行时库和堆栈,即使您的可执行文件没有分配其他块。
在 Windows 上,仅通过将二进制文件与 LARGEADDRESSAWARE 标志链接,您可以获得超过 2GB 的分配。 MSDN 文档中有简短的说明信息。
可以通过将您的应用构建为 64 位可执行文件来避免此限制,前提是您只能针对 64 位 Windows 机器。
给定的 Windows 版本 here 有更多关于内存限制的背景信息。如果您坚持使用 32 位,PAE 可能会有用。