Udostępnij za pośrednictwem


Dostrajanie 4 gigabajtów: BCDEdit i Boot.ini

W 32-bitowych wersjach systemu Windows aplikacje mają dostępne 4 gigabajty (GB) wirtualnej przestrzeni adresowej. Wirtualna przestrzeń adresowa jest podzielona tak, aby 2 GB było dostępne dla aplikacji, a pozostałe 2 GB jest dostępne tylko dla systemu. Funkcja dostrajania 4-gigabajtowego (dostrajanie pamięci RAM 4GT lub 4GT), włączona za pomocą polecenia BCDEdit /set increaseuserva, zwiększa wirtualną przestrzeń adresową dostępną dla aplikacji do 3 GB i zmniejsza ilość dostępną dla systemu do zakresu między 1 a 2 GB.

W przypadku aplikacji intensywnie korzystających z pamięci, takich jak systemy zarządzania bazami danych (DBMS), użycie większej wirtualnej przestrzeni adresowej może zapewnić znaczną wydajność i skalowalność. Jednak pamięć podręczna plików, stronicowana pula i pula niestronicowana są mniejsze, co może niekorzystnie wpłynąć na aplikacje z intensywnym użyciem sieci lub operacjami we/wy. W związku z tym możesz przetestować aplikację pod obciążeniem i sprawdzić liczniki wydajności, aby określić, czy aplikacja korzysta z większej przestrzeni adresowej.

Aby włączyć 4GT, użyj polecenia BCDEdit /set, aby ustawić increaseuserva wejścia rozruchu na wartość z zakresu od 2048 (2 GB) do 3072 (3 GB).

Windows Server 2003 i starsze: Aby włączyć 4GT, dodaj przełącznik /3GB do pliku Boot.ini. Przełącznik /3 GB jest obsługiwany w następujących systemach:

  • Windows Server 2003
  • Windows XP Professional

Przełącznik /3 GB udostępnia pełną 3 GB wirtualnej przestrzeni adresowej dla aplikacji i zmniejsza ilość dostępną dla systemu do 1 GB. W systemie Windows Server 2003 ilość dostępnej przestrzeni adresowej dla aplikacji można dostosować, ustawiając przełącznik /USERVA w Boot.ini na wartość z zakresu od 2048 do 3072, co zwiększa ilość przestrzeni adresowej dostępnej dla systemu. Może to pomóc w utrzymaniu ogólnej wydajności systemu, gdy aplikacja wymaga więcej niż 2 GB, ale mniej niż 3 GB przestrzeni adresowej.

Aby umożliwić aplikacji używanie większej przestrzeni adresowej, ustaw flagę IMAGE_FILE_LARGE_ADDRESS_AWARE w nagłówku obrazu. Konsolidator (linker) dołączony do programu Microsoft Visual C++ obsługuje przełącznik /LARGEADDRESSAWARE, aby ustawić tę flagę. Ustawienie tej flagi, a następnie uruchomienie aplikacji w systemie, który nie ma obsługi 4GT, nie powinno mieć wpływu na aplikację.

W 64-bitowych wersjach systemu Windows aplikacje 32-bitowe oznaczone flagą IMAGE_FILE_LARGE_ADDRESS_AWARE mają dostępne 4 GB przestrzeni adresowej.

wersje Itanium systemu Windows Server 2003: Przed dodatkiem SP1 procesy 32-bitowe mają dostępne tylko 2 GB przestrzeni adresowej.

Skorzystaj z poniższych wskazówek, aby obsługiwać 4GT w aplikacjach:

  • Adresy w pobliżu granicy 2 GB są zwykle używane przez różne systemowe biblioteki DLL. W związku z tym proces 32-bitowy nie może przydzielić więcej niż 2 GB ciągłej pamięci, nawet jeśli jest dostępna cała przestrzeń adresowa 4 GB.
  • Aby pobrać łączną ilość przestrzeni wirtualnej użytkownika, użyj funkcji GlobalMemoryStatusEx. Aby pobrać najwyższy możliwy adres użytkownika, użyj funkcji GetSystemInfo. Zawsze wykrywaj rzeczywistą wartość w czasie wykonywania i unikaj używania definicji stałej przewodowej, takich jak: #define HIGHEST_USER_ADDRESS 0xC0000000.
  • Unikaj podpisanych porównań ze wskaźnikami, ponieważ mogą powodować awarię aplikacji w systemie obsługującym 4GT. Warunek taki jak poniżej jest fałszywy dla wskaźnika powyżej 2 GB: if (pointer > 40000000).
  • Kod, który używa najwyższego bitu wskaźnika dla celu zdefiniowanego przez aplikację, zakończy się niepowodzeniem po włączeniu trybu 4GT. Na przykład 32-bitowy wyraz może być uważany za adres trybu użytkownika, jeśli znajduje się poniżej 0x80000000, i kod błędu, jeśli powyżej. To nie dotyczy 4GT.

VirtualAlloc zwykle zwraca małe adresy przed wysokimi adresami. W związku z tym proces może nie używać bardzo wysokich adresów, chyba że przydziela dużo pamięci lub ma pofragmentowaną wirtualną przestrzeń adresową. Aby wymusić przydzielanie pamięci z wyższych adresów przed niższymi adresami dla konieczności testowania, użyj MEM_TOP_DOWN podczas wywoływania VirtualAlloc lub ustaw następującą wartość rejestru na 0x100000:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management\AllocationPreference

limity pamięci dla wersji systemu Windows

rozszerzenie adresu fizycznego

dokumentacja techniczna 4GT