我的代码是32位,我也认为编译器。但是当我编译我的c ++代码时,它占用的内存超过2 GB。根据我对32位系统的理解,没有任何过程可以占用超过2 GB 有什么建议我能做到这一点吗?我发现很多帖子,但那些 没有帮助,因为他们正在添加掉期。但我已经有8 GB内存。所以我的问题是没有可用内存,它的编译过程大小不能超过2 GB。
即使我有8 GB ram,我也试图添加交换,但这也无效。
答案 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太字节。