Kan en 32bit-proces få adgang til mere hukommelse på et 64-bit Windows OS?

Indlæg af Hanne Mølgaard Plasc

Problem



Fra det jeg forstår, kan en 32bit-proces kun få adgang til 2 GB hukommelse på 32-bit windows uden/3GB-kontakten, og at noget af den hukommelse er optaget af operativsystemet for sine egne djævelske grunde. Dette ser ud til at passe sammen med mine erfaringer, da vi har en app, der går ned, når den når omkring 1,2 - 1,5 GB RAM uden for hukommelses undtagelser, selv om der stadig er masser af hukommelse til rådighed.


Mit spørgsmål er, ville flytte denne 32bit app til 64bit windows tillader det adgang mere end 1,5GB eller så hukommelse det kan nu? Eller vil selve appen skal opgraderes til 64bit?

Bedste reference


Nyere versioner af Visual Studio har et nyt flag, der gør 32-bit apps 'store adresser bevidste'. I grund og grund hvad det gør er at hvis den sættes på en 64-bit version af Windows, så får den 4GB (grænsen på 32-bit pointers). Det er helt sikkert bedre end de 2 eller 3 GB du får på 32 -bit versioner af Windows. Se http://msdn.microsoft.com/en-us/library/aa366778.aspx:[1]


Det siger især:



  Grænser for hukommelse og adresserum
  variere efter platform, operativsystem,
  og ved om
  IMAGE\_FILE\_LARGE\_ADDRESS\_AWARE værdi
  af LOADED\_IMAGE strukturen og
  4-gigabyte tuning (4GT) er i brug.
  IMAGE\_FILE\_LARGE\_ADDRESS\_AWARE er indstillet
  eller ryddet ved at bruge
  /LARGEADDRESSAWARE linker indstilling.



Se også: http://msdn.microsoft.com/en-us/library/wz223b1z.aspx[2]

Andre referencer 1


Ja, under de rette omstændigheder kan en 32-bitsproces på Windows få adgang til en fuld 4 GB hukommelse, snarere end 2Gb den normalt er begrænset til.


For at dette skal fungere, har du brug for følgende:



  • Appen skal køre på et 64-bit OS

  • Appen skal kompileres med/LARGEADDRESSAWARE flag.

  • Appen skal testes for at sikre, at den rent faktisk fungerer korrekt i dette tilfælde. ;) (specifikt kode, der bygger på alle pointers peger på adresser under 2GB grænsen vil naturligvis ikke fungere her)


Andre referencer 2


Din app vil blive begrænset af markørstørrelsen, i dit eksempel 32 bit.


Hvis din app skulle få adgang til mere hukommelse, ville du have brug for en slags segmenteret hukommelsesarkitektur, som vi havde i de 16 bit dage, hvor apps brugte 16bit pointers og offsets for at få adgang til hele 32 biters hukommelsesplads.

Andre referencer 3


WOW64 tillader brug af 32-bit Windows-applikation på 64-bit Windows, der oversætter 32-bit pointers til ægte 64-bit pointers. Og faktisk 32-bit adressering skal tillade adgang til 4 GB hukommelse.