我有32位的代码,我想编译器也是。但是当我编译我的c++代码时,它占用了超过2 GB的内存。根据我对32位系统的理解,任何进程占用的内存都不能超过2 GB。
有什么建议吗?我怎样才能做到这一点?我找到了很多关于这个的帖子,但是那些
没有帮助,因为他们正在添加交换。但是我已经有8 GB的内存了。所以我的问题是没有可用的内存,它的编译进程的大小不能超过2 GB。
即使我有8 GB的内存,我也尝试添加交换,但这也不起作用。
发布于 2017-08-22 14:30:13
在Windows 32位上,最大RAM容量为4 GB。默认情况下,此地址空间分为内核内存和进程内存,两者的大小均为2 GB。大多数程序不需要超过2 GB的内存,但是如果超过2 GB,您可以通过指定/3GB开关来扩大进程内存,从而减少留给内核的内存。
更多信息请阅读此处:https://msdn.microsoft.com/en-us/library/windows/hardware/ff556232(v=vs.85).aspx
编辑:请记住,如果您想使用这个额外的内存,您还需要使用/LARGEADDRESSAWARE开关编译您的程序。这将在您的程序的进程环境块中设置一个标志,使Windows知道您的程序可能需要超过2 GB的内存。
发布于 2017-08-22 14:48:21
既然你说你有8 8GB的RAM,我假设你的操作系统和CPU实际上是64位的。所以你在问如何让32位程序在64位操作系统上访问超过2 2GB的虚拟地址空间,也就是说,在WOW64下运行。
在这种情况下,在Visual Studio中使用/LARGEADDRESSAWARE linker option将为您的应用程序提供4 4GB的虚拟地址空间under WOW64。您不会在32位Windows中看到任何好处,除非您强制用户使用特定的标志来启动他们的操作系统。
我相信你的应用程序并不需要超过2 2GB的内存,但在不了解细节的情况下是不可能判断的。
在任何情况下,一个正确的答案是:切换到64位应用程序,这将为您提供8TB的虚拟地址空间。这是8TB的。
https://stackoverflow.com/questions/45810007
复制相似问题