Pojedynczy proces 32-bitowy w 64-bitowym systemie operacyjnym jest ograniczony do 2 GB. Ale jeśli jest skompilowany do pliku EXE z IMAGE_FILE_LARGE_ADDRESS_AWARE
ustawionym bitem, ma limit 4 GB, a nie 2 GB - patrz https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx
Rzeczy, które słyszysz o specjalnych flagach rozruchowych, 3 GB, /3GB
przełącznikach lub /userva
wszystkie dotyczą 32-bitowych systemów operacyjnych i nie mają zastosowania w 64-bitowym systemie Windows.
Więcej informacji można znaleźć pod adresem https://msdn.microsoft.com/en-us/library/aa366778(v=vs.85).aspx .
Jeśli chodzi o 32-bitowe systemy operacyjne, wbrew przekonaniu nie ma fizycznego limitu 4 GB dla 32-bitowych systemów operacyjnych. Na przykład 32-bitowe serwerowe systemy operacyjne, takie jak 32-bitowy Microsoft Windows Server 2008, mogą uzyskać dostęp do 64 GB(Edycje Windows Server 2008 Enterprise i Datacenter) - za pomocą Physical Address Extension (PAE), które po raz pierwszy wprowadził Intel w Pentium Pro, a później AMD w procesorze Athlon - definiuje trzypoziomową hierarchię tabel stron, z wpisami tabeli po 64 bity każdy zamiast 32, umożliwiając tym procesorom bezpośredni dostęp do fizycznej przestrzeni adresowej większej niż 4 gigabajty - więc teoretycznie 32-bitowy system operacyjny może teoretycznie uzyskać dostęp do 2 ^ 64 bajtów lub 17179869184 gigabajtów, ale segment jest ograniczone do 4 GB. Jednak ze względów marketingowych Microsoft ograniczył maksymalną dostępną pamięć w systemach operacyjnych innych niż serwerowe do zaledwie 4 GB lub nawet 3 GB efektywnie. W ten sposób pojedynczy proces może uzyskać dostęp do ponad 4 GB w 32-bitowym systemie operacyjnym - czego przykładem jest serwer Microsoft SQL.
Procesy 32-bitowe w 64-bitowym systemie Windows nie mają żadnej wady w porównaniu z procesami 64-bitowymi pod względem korzystania z wirtualnej przestrzeni adresowej współdzielonego jądra (zwanej również przestrzenią systemową ). Wszystkie procesy, czy to 64-bitowe, czy 32-bitowe, w 64-bitowym systemie Windows współużytkują tę samą 64-bitową przestrzeń systemową.
Biorąc pod uwagę fakt, że przestrzeń systemowa jest współdzielona przez wszystkie procesy , w 32-bitowym systemie Windows procesy, które tworzą dużą liczbę uchwytów (takie jak wątki, semafory, pliki itp.), Zajmują przestrzeń systemową przez obiekty jądra i mogą zabraknąć nawet pamięci jeśli masz w sumie dużo dostępnej pamięci. Z kolei w 64-bitowym systemie Windows przestrzeń jądra jest 64-bitowa i nie jest ograniczona do 4 GB. Wszystkie wywołania systemowe wykonywane przez aplikacje 32-bitowe są konwertowane na natywne wywołania 64-bitowe w trybie użytkownika .