2017-08-22 3 views
0

zuweisen Ich habe Code, der 32 Bit ist und ich denke, Compiler auch. Aber wenn ich meinen C++ Code kompiliere, nimmt es mehr als 2 GB Speicher. Nach meinem Verständnis auf 32-Bit-System kann kein Prozess mehr als 2 GB dauern.
Irgendwelche Vorschläge, wie kann ich das erreichen? Ich habe viele Beiträge gefunden, aber diese
sind nicht hilfreich, da sie Swaps hinzufügen. Aber ich habe schon 8 GB RAM. Also mein Problem ist nicht verfügbarer Speicher, seine Größe des kompilierenden Prozesses, der nicht mehr als 2 GB sein könnte.virtuellen Speicher erschöpft: Kann nicht Speicher mit 8 GB RAM

Sogar ich habe 8 GB RAM Ich habe versucht, Swap hinzuzufügen und das funktioniert auch nicht.

+0

Der virtuelle Adressraum für jeden Prozess ist nur 2 Gigs. Die anderen 2 Gigs sind für das Betriebssystem reserviert, um es nach eigenem Ermessen zu verwenden. Es gibt einen Weg in Windows, um 3 Gigs zu machen, wenn man danach googelt. Es spielt keine Rolle, wie viel RAM oder Swap Sie in Ihrem Computer haben. Besser, installiere einfach ein 64-Bit-Betriebssystem und mach dir keine Sorgen mehr darum. – xaxxon

+0

Was ist die "Größe des Kompilierprozesses"? Was ist deine Frage eigentlich? Anregung, was zu erreichen? Fragen Sie, wie Sie die Platzeffizienz Ihres Programms verbessern können, ohne Code einzufügen? Oder fragen Sie, wie Sie von 32-Bit zu 64-Bit wechseln? * Nach meinem Verständnis auf 32-Bit-System kann kein Prozess mehr als 2 GB * nehmen - Ja, dieses Verständnis ist (mehr oder weniger) korrekt, es sei denn, Sie wollen Benutzer Ihres Programms zwingen, ihre Windows mit dem '/ 3TB' zu booten Parameter. – Groo

+0

Graben Sie Ihr 32-Bit-Betriebssystem und Compiler. –

Antwort

2

Unter Windows 32 Bit beträgt die maximale Arbeitsspeichergröße 4 GB. Standardmäßig ist dieser Adressraum in Kernelspeicher und Prozessspeicher unterteilt, die beide 2 GB groß sind. Die meisten Programme benötigen nicht mehr als 2 GB Arbeitsspeicher, aber wenn Sie dies tun, können Sie den Prozessspeicher vergrößern, indem Sie den Schalter/3GB angeben, wodurch weniger Speicher für den Kernel verbleibt.

Lesen Sie hier für weitere Informationen: https://msdn.microsoft.com/en-us/library/windows/hardware/ff556232(v=vs.85).aspx

Edit: Beachten Sie, dass, wenn Sie die Verwendung dieser zusätzlichen Speicher machen wollen, müssen Sie auch Ihr Programm mit dem/LARGEADDRESSAWARE Schalter kompilieren. Dadurch wird im Prozessumgebungsblock Ihres Programms ein Flag gesetzt, sodass Windows erkennt, dass Ihr Programm mehr als 2 GB Arbeitsspeicher benötigt.

0

Da Sie angegeben haben, dass Sie 8 GB RAM haben, nehme ich an, dass Ihr Betriebssystem und CPU tatsächlich 64-Bit sind. Sie fragen also, wie Sie einem 32-Bit-Programm auf einem 64-Bit-Betriebssystem, das unter WOW64 läuft, Zugriff auf mehr als 2 GB virtuellen Adressraum verschaffen können.

In diesem Fall wird die /LARGEADDRESSAWARE linker option in Visual Studio geben Sie Ihre App 4GB virtuellen Adressraum, under WOW64. Sie werden keinen Vorteil in 32-Bit-Windows sehen, es sei denn, Sie zwingen Ihre Benutzer, ihr Betriebssystem mit einem bestimmten Flag zu booten.

Ich glaube, dass Ihre App nicht wirklich mehr als 2 GB RAM benötigt, aber es ist unmöglich zu sagen, ohne irgendwelche Details zu kennen.

In jedem Fall ist die eine richtige Antwort: Wechseln Sie zu einer 64-Bit-App, die Sie 8 TB virtuellen Adressraum erhält. Das ist 8 Terabyte.

Verwandte Themen