虚拟内存耗尽:无法使用8 GB内存分配内存

时间:2017-08-22 06:07:24

标签: c++ memory makefile compiler-errors compilation

我的代码是32位,我也认为编译器。但是当我编译我的c ++代码时,它占用的内存超过2 GB。根据我对32位系统的理解,没有任何过程可以占用超过2 GB 有什么建议我能做到这一点吗?我发现很多帖子,但那些 没有帮助,因为他们正在添加掉期。但我已经有8 GB内存。所以我的问题是没有可用内存,它的编译过程大小不能超过2 GB。

即使我有8 GB ram,我也试图添加交换,但这也无效。

2 个答案:

答案 0 :(得分:2)

在Windows 32位上,最大RAM量为4 GB。默认情况下,此地址空间分为内核内存和进程内存,两者都大2 GB。大多数程序不需要超过2 GB的内存,但如果这样做,可以通过指定/ 3GB开关来扩大进程内存,从而为内核留下更少的内存。

请在此处阅读以获取更多信息:https://msdn.microsoft.com/en-us/library/windows/hardware/ff556232(v=vs.85).aspx

编辑:请记住,如果要使用这个额外的内存,还需要使用/ LARGEADDRESSAWARE开关编译程序。这将在程序的Process Environment Block中设置一个标志,使Windows意识到您的程序可能需要超过2 GB的内存。

答案 1 :(得分:0)

既然你说你有8GB的RAM,我假设你的操作系统和CPU实际上是64位的。因此,您要问如何使32位程序在64位操作系统上访问超过2GB的虚拟地址空间,即在WOW64下运行。

在这种情况下,使用Visual Studio中的/LARGEADDRESSAWARE linker option将为您的应用提供 4GB 的虚拟地址空间under WOW64。您不会在32位Windows中看到任何好处,除非您强制用户使用某个标志启动其操作系统。

我相信你的应用程序并不需要超过2GB的内存,但如果不知道任何细节,就无法分辨。

在任何情况下,一个正确答案是:切换到64位应用程序,这将获得8TB的虚拟地址空间。那是 8太字节