Wann hat ein Windows-Prozess nicht genügend Arbeitsspeicher?

Unter Windows Server 2003, Enterprise Edition, SP2 (/ 3GB-Schalter nicht aktiviert)

Wie ich es verstehe, und ich kann falsch liegen, ist die maximale adressierbare Speicher für einen Prozess 4 GB.

Sind das 2 GB private Bytes und 2 GB virtuelle Bytes?

Erhalten Sie "out of memory" -Fehler, wenn das private Byte-Limit oder das virtuelle Byte-Limit erreicht ist?

2

6 Antworten

Es ist richtig, dass der maximale Adressraum eines Prozesses in gewisser Weise 4 GB beträgt. Die Hälfte des Adressraums wird für jeden Prozess vom Betriebssystem belegt. Dies kann mit dem 3GB-Schalter geändert werden, aber es kann zu Systeminstabilität führen. Wir verfügen also über 2 GB adressierbaren Speicher, den der Prozess für sich alleine nutzen kann. Nun, nicht ganz. Es stellt sich heraus, dass ein Teil dieses Speicherplatzes von anderen Dingen wie DLLs oder einem anderen gängigen Code eingenommen wird. Der tatsächliche Speicher, der Ihnen als Programmierer zur Verfügung steht, liegt bei 1,5 bis 1,7 GB.

Ich weiß nicht genau, wie du damit umgehen kannst, wenn du über diese Grenze hinausgehst, aber ich kenne Spiele, die aus diesem Grund in großen Multiplayer-Karten abstürzen. Eine andere Sache zu beachten ist, dass ein 32-Bit-Programm nicht mehr als die 2 GB Adressraum auf einem 64-Bit-System verwenden kann, wenn sie das/LARGEADDRESSAWARE: YES-Linker-Flag aktivieren.

4
hinzugefügt

Der maximal adressierbare Speicher für eine 32-Bit-Maschine beträgt 4 GB, für eine 64-Bit-Maschine können Sie mehr Lasten adressieren. (Obwohl einige 32bit-Maschinen Erweiterungssysteme für den Zugriff auf mehr haben, aber ich denke nicht, dass es sich lohnt, sich damit zu beschäftigen oder darüber nachzudenken).

Sie erhalten keine Speicherfehler mehr, wenn das virtuelle Limit erreicht ist. Unter Windows Server 2003 teilt Ihnen der Task-Manager das Limit auf der Leistungsregisterkarte mit, Gebührengrenze begrenzen '.

0
hinzugefügt

Der folgende Link erklärt es viel besser als ich es jemals könnte:

MSDN - CLR Inside Out: Untersuchung von Speicherproblemen

0
hinzugefügt

Wenn bei 32 Bit genügend physischer Speicher und Festplattenspeicher für den virtuellen Speicher vorhanden ist, wird der Speicher um 3 GB reduziert, da der Kernel den Adressraum über 0xC0000000 für sich reserviert. Auf einem 64-Bit-Kernel, der eine 64-Bit-Anwendung ausführt, liegt die Grenze bei 8 TB.

For more details, check out MSDN - Memory Limits for Windows Releases

0
hinzugefügt

Mark Russinovich started a series of posts on this.. Pushing the Limits of Windows: Physical Memory

Während 4 GB das lizenzierte Limit für 32-Bit-Client-SKUs darstellen, ist das effektive Limit tatsächlich niedriger und hängt vom Systemchipsatz und den angeschlossenen Geräten ab. Der Grund dafür ist, dass die physische Adresszuordnung nicht nur RAM, sondern auch Gerätespeicher umfasst und x86- und x64-Systeme den gesamten Gerätespeicher unterhalb der 4-GB-Adressgrenze abbilden, um kompatibel mit 32-Bit-Betriebssystemen zu bleiben, die nicht zu handhaben sind Adressen größer als 4 GB. Wenn ein System über 4 GB RAM verfügt und Geräte, wie Video-, Audio- und Netzwerkadapter, Fenster mit 500 MB in den Gerätespeicher implementieren, befinden sich 500 MB der 4 GB RAM oberhalb der 4 GB-Adressgrenze.

0
hinzugefügt

Sie können auf 32-Bit-Windows-Plattformen nur auf insgesamt 2 GB Speicher zugreifen (ohne den 3Gb-Switch).

Sie können mehrere 32-Bit-VMs auf einem 64-Bit-Betriebssystem ausführen, sodass jede App auf so viel Speicher wie möglich zugreifen kann, wenn Ihr Computer mehr als 4 GB hat.

Viele Leute fangen gerade erst an, diese Hindernisse zu überwinden, ich denke, es ist einfacher, wenn Ihre App in .net oder Java ist, da die VMs glücklicherweise bis zu 32 GB Speicher auf 64-Bit-Betriebssystemen erreichen.

0
hinzugefügt