Unter Windows kann ein 32-Bit-Prozess unter normalen Umständen nur auf 2 GB RAM zugreifen (oder auf 3 GB mit einem speziellen Schalter in der Datei boot.ini). Wie viel Speicher ist verfügbar, wenn ein 32-Bit-Prozess auf einem 64-Bit-Betriebssystem ausgeführt wird? Gibt es spezielle Schalter oder Einstellungen, die dies ändern können?
85
Antworten:
Standardmäßig 2 GB. Wenn die Anwendung über einen großen Adressraum verfügt (verknüpft 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.
quelle
since many application depends on the top bit of pointers to be zero
meinen Sie, dass das 32. Bit des Adressierungsschemas beim Durchlaufen des Adressraums des Prozesses nicht berücksichtigt oder verwendet wird.4 GB abzüglich der vom System verwendeten Daten, wenn Sie eine Verbindung mit / LARGEADDRESSAWARE herstellen.
Natürlich sollten Sie mit der Zeigerarithmetik noch vorsichtiger sein, wenn Sie dieses Flag setzen.
quelle
Niemand scheint die Tatsache zu berühren, dass das wow64-Subsystem viele verschiedene 32-Bit-Anwendungen überall im Speicher über 4 G zuordnen kann. In einem 64-Bit-Fenster mit ausreichend Speicher können Sie also viel mehr 32-Bit-Anwendungen ausführen als auf einem nativen 32-Bit-System.
quelle
Ein 32-Bit-Prozess ist in einem 64-Bit-Betriebssystem immer noch auf dieselben Einschränkungen beschränkt. Das Problem ist, dass Speicherzeiger nur 32 Bit breit sind, sodass das Programm keine Speicheradresse zuweisen / auflösen kann, die größer als 32 Bit ist.
quelle
Ein einzelner 32-Bit-Prozess unter einem 64-Bit-Betriebssystem ist auf 2 GB beschränkt. Wenn es jedoch zu einer EXE-Datei mit
IMAGE_FILE_LARGE_ADDRESS_AWARE
gesetztem Bit kompiliert wird, hat es ein Limit von 4 GB, nicht von 2 GB - siehe https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspxDie Dinge, die Sie über spezielle Startflags, 3 GB,
/3GB
Switches oder/userva
alles über 32-Bit-Betriebssysteme hören, gelten nicht für 64-Bit-Windows.Weitere Informationen finden Sie unter https://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx .
Bei den 32-Bit-Betriebssystemen gibt es entgegen der Annahme keine physische Grenze von 4 GB für 32-Bit-Betriebssysteme. Beispielsweise können 32-Bit-Server-Betriebssysteme wie Microsoft Windows Server 2008 32-Bit auf bis zu 64 GB zugreifen(Windows Server 2008 Enterprise- und Datacenter-Editionen) - Mithilfe der Physical Address Extension (PAE), die zuerst von Intel im Pentium Pro und später von AMD im Athlon-Prozessor eingeführt wurde, wird eine Seitentabellenhierarchie mit drei Ebenen definiert. Mit Tabelleneinträgen von jeweils 64 Bit anstelle von 32 können diese CPUs direkt auf einen physischen Adressraum zugreifen, der größer als 4 Gigabyte ist. Theoretisch kann ein 32-Bit-Betriebssystem also theoretisch auf 2 ^ 64 Byte oder 17.179.869.184 Gigabyte zugreifen, das Segment jedoch begrenzt durch 4GB. Aus Marketinggründen hat Microsoft den maximal verfügbaren Speicher auf Nicht-Server-Betriebssystemen jedoch auf nur 4 GB oder sogar 3 GB effektiv beschränkt. Somit kann ein einzelner Prozess auf einem 32-Bit-Betriebssystem auf mehr als 4 GB zugreifen - und Microsoft SQL Server ist ein Beispiel.
32-Bit-Prozesse unter 64-Bit-Windows haben keinen Nachteil im Vergleich zu 64-Bit-Prozessen bei der Verwendung des virtuellen Adressraums des gemeinsam genutzten Kernels (auch als Systemraum bezeichnet ). Alle Prozesse, sei es 64-Bit oder 32-Bit, unter 64-Bit-Windows teilen sich den gleichen 64-Bit-Systemspeicher.
Angesichts der Tatsache, dass der Systemspeicher unter 32-Bit-Windows von allen Prozessen gemeinsam genutzt wird , belegen Prozesse, die eine große Anzahl von Handles erstellen (wie Threads, Semaphoren, Dateien usw.) , den Systemspeicherplatz von Kernelobjekten und können sogar keinen Speicher mehr haben wenn Sie insgesamt viel Speicher zur Verfügung haben. Im Gegensatz dazu ist der Kernelspeicher unter 64-Bit-Windows 64-Bit und nicht auf 4 GB beschränkt. Alle Systemaufrufe von 32-Bit-Anwendungen werden im Benutzermodus in native 64-Bit-Aufrufe konvertiert .
quelle
Sie haben die gleiche grundlegende Einschränkung, wenn Sie einen 32-Bit-Prozess unter Win64 ausführen. Ihre App läuft auf einem 32-Subsystem, das jedoch wie Win32 aussieht. Dazu gehören die Speicherbeschränkungen für Ihren Prozess (untere 2 GB für Sie, obere 2 GB für das Betriebssystem).
quelle
Das Limit ist nicht 2 g oder 3 GB, sondern 4 GB für 32 Bit.
Der Grund, warum die Leute denken, dass es 3 GB sind, ist, dass das Betriebssystem 3 GB frei anzeigt, wenn sie wirklich 4 GB System-RAM haben.
Sein Gesamt-RAM von 4 GB. Wenn Sie also eine 1-GB-Grafikkarte haben, die als Teil des vom 32-Bit-Betriebssystem angezeigten Gesamt-RAM zählt.
4Gig nicht 3 nicht 2 verstanden?
quelle