2017-05-19 2 views
1

Ich habe eine alte Anwendung für 32-Bit-Windows XP, die nur 2 GB RAM auf meinem 64-Bit-Windows 10-System zuweisen kann. Da diese Anwendung mehr als 2 GB RAM zu verwenden versucht, wenn eine große Datenmenge speichern, ich bin wie dieser eine Out of Memory Exception bekommen:Zuweisen von mehr RAM ohne Neukompilierung

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.

Hinweis: Der Quellcode der Anwendung ist nicht verfügbar.

Ich sah auch einige Werkzeuge, die dieses Problem beheben, die Anwendung ohne zu 4 GB RAM zuweisen, indem ermöglicht mit der Anwendung neu zu kompilieren, wie Large Address Aware.

Meine Frage ist jetzt: Wie können diese Werkzeuge dies erreichen?

Hinweis: Ich verwende Windows 10 64-Bit mit den Programmiersprachen C++/C. Ich habe auch noch keinen Code, da ich nicht einmal weiß, wie das in der Theorie funktioniert.

+0

Es ist nur ein einzelnes Bit in der [ausführbare Datei header] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms680313 (v = vs.85) .aspx), umdrehen auf IMAGE_FILE_LARGE_ADDRESS_AWARE ist alles was es braucht. Nimmt 5 Zeilen Code. –

Antwort

1

Es setzt das Large-Address-aware-Flag im Win32PE-Header der ausführbaren Datei. Dies wird normalerweise zur Verbindungszeit festgelegt. Die Anwendung ist möglicherweise nicht in der Lage, eine Speicherzuweisung von mehr als 2 G zu verarbeiten, wenn sie vordefinierte 32-Bit-Werte verwendet, um in diese Zuordnungen zu indizieren.

Verwandte Themen