2017-08-22 75 views
0

我有代码是32位,我也认为编译器。但是当我编译我的C++代码时,它占用了2GB以上的内存。根据我对32位系统的理解,任何进程都不会超过2 GB。
任何建议如何实现这一目标?我发现很多帖子,但这些
没有帮助,因为他们正在添加掉期。但我已经有8 GB的内存。所以我的问题是没有可用的内存,其编译过程的大小不能超过2 GB。虚拟内存耗尽:无法分配内存8 gb ram

即使我有8 GB的RAM我试图添加交换,这也不起作用。

+0

每个进程可用的虚拟地址空间只有2个演出。其他2个giigs保留供操作系统使用,因为它认为合适。如果你是谷歌的话,有一种方法可以在Windows中进行3次演出。不要紧,你的计算机有多少内存或交换。更好的是,只需安装一个64位操作系统,不用担心它了。 – xaxxon

+0

什么是“编译过程的大小”?你的问题实际上是什么?建议实现什么?您是否问如何提高程序的空间效率,而不粘贴任何代码?还是你问如何从32位切换到64位? *根据我对32位系统的理解,任何进程都不能超过2 GB * - 是的,这种理解(或多或少)是正确的,除非您想强制程序的用户使用'/ 3TB'启动他们的窗口参数。 – Groo

+0

抛弃你的32位操作系统和编译器。 –

回答

2

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

这里阅读更多信息:https://msdn.microsoft.com/en-us/library/windows/hardware/ff556232(v=vs.85).aspx

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

0

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

在这种情况下,在Visual Studio中使用/LARGEADDRESSAWARE linker option将为您的应用程序4GB虚拟地址空间under WOW64。除非您强制用户使用特定标志引导其操作系统,否则在32位Windows中不会看到任何好处。

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

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