Dela via


Virtuellt adressutrymme (programmeringsguide för 64-bitars Windows)

Som standard har 64-bitars Microsoft Windows-baserade program ett adressutrymme i användarläge på flera terabyte. Exakta värden finns i Minnesgränser för Windows- och Windows Server-versioner. Program kan dock ange att systemet ska allokera allt minne för programmet under 2 gigabyte. Den här funktionen är fördelaktig för 64-bitarsprogram om följande villkor är uppfyllda:

  • Det räcker med ett adressutrymme på 2 GB.
  • Koden har många varningar om pekaretrunkering.
  • Pekare och heltal blandas fritt.
  • Koden har polymorfism med hjälp av 32-bitars datatyper.

Alla pekare är fortfarande 64-bitars pekare, men systemet ser till att varje minnesallokering sker under gränsen på 2 GB, så att inga betydande data går förlorade om programmet trunkerar en pekare. Pekare kan trunkeras till 32-bitarsvärden och sedan utökas till 64-bitarsvärden genom att antingen signera tillägg eller nolltillägg.

Om du vill ange den här minnesbegränsningen använder du alternativet /LARGEADDRESSAWARE:NO linker. Observera att /LARGEADDRESSAWARE:NO ignoreras för en ARM64-binär fil. Tänk dock på att problem kan uppstå när du använder det här alternativet. Om du skapar en DLL som använder det här alternativet och DLL-filen anropas av ett program som inte använder det här alternativet kan DLL:en trunkera en 64-bitars pekare vars övre 32 bitar är betydande. Detta kan orsaka programfel utan varning.