Udostępnij za pośrednictwem


Wirtualna przestrzeń adresowa (przewodnik programowania dla 64-bitowego systemu Windows)

Domyślnie 64-bitowe aplikacje oparte na systemie Microsoft Windows mają przestrzeń adresową trybu użytkownika kilku terabajtów. Aby uzyskać dokładne wartości, zobacz Limity pamięci dla wersji systemu Windows i Windows Server. Jednak aplikacje mogą określić, że system powinien przydzielić całą pamięć dla aplikacji poniżej 2 gigabajtów. Ta funkcja jest przydatna w przypadku aplikacji 64-bitowych, jeśli spełnione są następujące warunki:

  • Przestrzeń adresowa 2 GB jest wystarczająca.
  • Kod zawiera wiele ostrzeżeń o obcięciu wskaźnika.
  • Wskaźniki i liczby całkowite są swobodnie mieszane.
  • Kod ma polimorfizm przy użyciu 32-bitowych typów danych.

Wszystkie wskaźniki są nadal 64-bitowymi wskaźnikami, ale system zapewnia, że każda alokacja pamięci występuje poniżej limitu 2 GB, dzięki czemu jeśli aplikacja obcina wskaźnik, żadne istotne dane nie zostaną utracone. Wskaźniki można obcinać do wartości 32-bitowych, a następnie rozszerzać do wartości 64-bitowych przez rozszerzenie znaku lub rozszerzenie zerowe.

Aby określić to ograniczenie pamięci, użyj opcji konsolidatora /LARGEADDRESSAWARE:NO. Należy pamiętać, że /LARGEADDRESSAWARE:NIE jest ignorowany dla pliku binarnego ARM64. Należy jednak pamiętać, że podczas korzystania z tej opcji mogą wystąpić problemy. Jeśli utworzysz bibliotekę DLL korzystającą z tej opcji, a biblioteka DLL jest wywoływana przez aplikację, która nie używa tej opcji, biblioteka DLL może obcinać wskaźnik 64-bitowy, którego górne 32 bity są znaczące. Może to spowodować niepowodzenie aplikacji bez żadnego ostrzeżenia.