分配更多RAM而无需重新编译

时间:2017-05-19 23:16:50

标签: windows memory memory-management out-of-memory

我有一个32位Windows XP的旧应用程序,它只能在我的64位Windows 10系统上分配2GB的RAM。由于此应用程序在存储大量数据时尝试使用超过2GB的RAM,因此我得到的内存不足就像这样:

  

Out of memory 8 addresses: (unknown)(0): Worldbuilder.exe+825384 (unknown) (unknown)(0): Worldbuilder.exe+798965 (unknown) (unknown)(0): Worldbuilder.exe+793330 (unknown) (unknown)(0): Worldbuilder.exe+793277 (unknown) (unknown)(0): Worldbuilder.exe+799637 (unknown) (unknown)(0): Worldbuilder.exe+666356 (unknown) (unknown)(0): Worldbuilder.exe+664774 (unknown) (unknown)(0): Worldbuilder.exe+723505 (unknown) Because of the severity of this error the game will now exit.

     

注意:该应用程序的源代码不可用。

我还看到了一些修复此问题的工具,它允许应用程序分配最多4GB的RAM ,而不必重新编译应用程序,如Large Address Aware

我现在的问题是: 这些工具如何实现这一目标。

  

注意:我使用的是带有编程语言C ++ / C的Windows 10 64bit。我还没有任何代码,因为我甚至不知道它在理论上是如何工作的。

1 个答案:

答案 0 :(得分:1)

它在可执行文件的Win32PE标头中设置了大地址识别标志。这通常在链接时设置。如果应用程序使用带符号的32位值来索引这些分配,则该应用程序实际上可能无法处理大于2G的内存分配。