Frage Wie viel Speicher kann ein 32-Bit-Prozess auf einem 64-Bit-Betriebssystem verarbeiten?


Unter Windows kann ein 32-Bit-Prozess unter normalen Umständen nur 2 GB RAM (oder 3 GB mit einem speziellen Schalter in der boot.ini-Datei) zugreifen. Wie viel Speicher ist bei einem 32-Bit-Prozess auf einem 64-Bit-Betriebssystem verfügbar? Gibt es spezielle Schalter oder Einstellungen, die dies ändern können?


75
2018-03-12 17:00


Ursprung


Antworten:


2 GB standardmäßig. Wenn die Anwendung einen großen Adressraum kennt (verbunden mit / LARGEADDRESSAWARE), erhält sie 4 GB (nicht 3 GB, siehe http://msdn.microsoft.com/en-us/library/aa366778.aspx)

Sie sind immer noch auf 2 GB begrenzt, da viele Anwendungen davon abhängen, dass das oberste Bit der Zeiger null ist.


75
2018-03-12 17:04



4 GB minus dem, was vom System verwendet wird, wenn Sie mit / LARGEADDRESSAWARE verknüpfen.

Natürlich sollten Sie mit der Zeigerarithmetik noch vorsichtiger sein, wenn Sie dieses Flag setzen.


17
2018-03-12 17:03



Niemand scheint darauf hinzuweisen, dass das wow64-Subsystem, wenn es viele verschiedene 32-Bit-Anwendungen gibt, diese irgendwo im Speicher oberhalb von 4G abbilden kann, sodass Sie in einem 64-Bit-Windows mit ausreichendem Speicher viel mehr 32-Bit-Anwendungen ausführen können als auf einem nativen 32-Bit-System.


14
2018-01-22 22:09



Ein 32-Bit-Prozess ist immer noch auf dieselben Einschränkungen in einem 64-Bit-Betriebssystem beschränkt. Das Problem besteht darin, dass Speicherzeiger nur 32 Bit breit sind. Daher kann das Programm keine Speicheradresse zuweisen oder auflösen, die größer als 32 Bit ist.


7
2018-03-12 17:04



Ein einzelner 32-Bit-Prozess unter einem 64-Bit-Betriebssystem ist auf 2 GB beschränkt. Wenn es jedoch in eine EXE-Datei mit dem Bitset IMAGE_FILE_LARGE_ADDRESS_AWARE kompiliert wird, hat es ein Limit von 4 GB, nicht 2 GB - siehe https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx

In beiden Fällen wird der virtuelle Adressraum des Kernels über alle Prozesse verteilt. Selbst wenn Sie eine sehr große Anzahl von 32-Bit-Prozessen haben, können sie deshalb nicht genügend Speicher haben, obwohl Sie viel Speicher für Ihr 64-Bit-Betriebssystem haben, sagen wir 16 GB - das 32-Bit Prozesse insgesamt können schnell aus dem ihnen zur Verfügung stehenden virtuellen Adressraum des Kernels (max. 2GB) auslaufen.

Die Dinge, die Sie über spezielle Boot-Flags, 3-GB- / 3-GB-Switches oder / userva hören, betreffen alle 32-Bit-Betriebssysteme und gelten nicht für 64-Bit-Windows.

Sehen https://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx für mehr Details.

Wie bei den 32-Bit-Betriebssystemen gibt es entgegen der Annahme keine physikalische Grenze von 4 GB für 32-Bit-Betriebssysteme. Beispielsweise können 32-Bit-Serverbetriebssysteme wie Microsoft Windows Server 2008 32-Bit auf bis zu zugreifen 64 GB (Windows Server 2008 Enterprise und Datacenter Editionen) - mittels Physical Address Extension (PAE), die zuerst von Intel im Pentium Pro und später von AMD im Athlon-Prozessor eingeführt wurde - definiert sie eine Seitentabellenhierarchie aus drei Ebenen, Mit Tabelleneinträgen von jeweils 64 Bit anstelle von 32 können diese CPUs direkt auf einen physischen Adressraum von mehr als 4 Gigabyte zugreifen - theoretisch kann also ein 32-Bit-Betriebssystem auf theoretisch 2 ^ 64 Byte oder 17.179.869.184 Gigabyte zugreifen, aber das Segment ist begrenzt durch 4GB. Aus Gründen des Marketings hat Microsoft jedoch den maximal verfügbaren Arbeitsspeicher auf Nicht-Server-Betriebssystemen auf nur 4 GB oder sogar 3 GB beschränkt. So kann ein einzelner Prozess auf mehr als 4 GB auf einem 32-Bit-Betriebssystem zugreifen - und Microsoft SQL-Server ist ein Beispiel.


2
2017-07-01 17:05



Sie haben die gleiche grundlegende Einschränkung, wenn Sie einen 32-Bit-Prozess unter Win64 ausführen. Ihre App läuft in einem 32-Subsystem, das sein Bestes gibt, um wie Win32 auszusehen, und dies beinhaltet die Speicherbeschränkungen für Ihren Prozess (niedrigere 2GB für Sie, obere 2GB für das Betriebssystem)


-1
2018-03-12 17:03



Das Limit ist nicht 2g oder 3GB sein 4GB für 32bit.

Der Grund, warum die Leute denken, dass es 3GB ist, ist, dass das Betriebssystem 3GB frei zeigt, wenn sie wirklich 4 GB System RAM haben.

Sein gesamter RAM von 4GB. Also, wenn Sie eine 1-GB-Grafikkarte haben, die als Teil des Gesamt-RAM von der 32-Bit-Betriebssystem angesehen wird zählt.

4Gig nicht 3 nicht 2 hat es?


-9
2018-05-14 12:27