W systemie Windows w normalnych warunkach proces 32-bitowy może uzyskać dostęp tylko do 2 GB pamięci RAM (lub 3 GB za pomocą specjalnego przełącznika w pliku boot.ini). Ile pamięci jest dostępne podczas uruchamiania procesu 32-bitowego w 64-bitowym systemie operacyjnym? Czy są jakieś specjalne przełączniki lub ustawienia, które mogą to zmienić?
86
Odpowiedzi:
Domyślnie 2 GB. Jeśli aplikacja obsługuje dużą przestrzeń adresową (połączoną z / LARGEADDRESSAWARE), otrzymuje 4 GB (nie 3 GB, patrz http://msdn.microsoft.com/en-us/library/aa366778.aspx )
Nadal są ograniczone do 2 GB, ponieważ wiele aplikacji zależy od tego, czy górny bit wskaźników wynosi zero.
źródło
since many application depends on the top bit of pointers to be zero
masz na myśli, że 32-ty bit schematu adresowania nie jest brany pod uwagę ani nie jest używany podczas przechodzenia przez przestrzeń adresową procesu.4 GB minus to, co jest używane przez system po połączeniu z / LARGEADDRESSAWARE.
Oczywiście, jeśli ustawisz tę flagę, powinieneś być jeszcze bardziej ostrożny z arytmetyką wskaźników.
źródło
Wydaje się, że nikt nie dotyka faktu, że jeśli masz wiele różnych 32-bitowych aplikacji, podsystem wow64 może mapować je w dowolnym miejscu w pamięci powyżej 4G, więc na 64-bitowych oknach z wystarczającą pamięcią możesz uruchomić znacznie więcej aplikacji 32-bitowych niż w natywnym systemie 32-bitowym.
źródło
Proces 32-bitowy jest nadal ograniczony do tych samych ograniczeń w 64-bitowym systemie operacyjnym. Problem polega na tym, że wskaźniki pamięci mają tylko 32 bity szerokości, więc program nie może przypisać / rozwiązać żadnego adresu pamięci większego niż 32 bity.
źródło
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).aspxRzeczy, 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 .
źródło
Masz to samo podstawowe ograniczenie podczas uruchamiania procesu 32-bitowego pod Win64. Twoja aplikacja działa w podsystemie 32, ale najlepiej wygląda jak Win32, a to obejmie ograniczenia pamięci dla twojego procesu (dolne 2 GB dla ciebie, górne 2 GB dla systemu operacyjnego)
źródło
Limit nie wynosi 2g lub 3 GB, a 4 GB dla wersji 32-bitowej.
Powodem, dla którego ludzie myślą, że jego 3 GB jest to, że system operacyjny pokazuje 3 GB wolnego miejsca, podczas gdy naprawdę mają 4 GB pamięci RAM.
Jego całkowita pamięć RAM 4 GB. Więc jeśli masz kartę graficzną 1 GB, która liczy się jako część całkowitej pamięci RAM wyświetlanej przez 32-bitowy system operacyjny.
4Gig nie 3 nie 2 masz to?
źródło