Domanda

Ho visto che su un sistema operativo Windows a 64 bit lo spazio degli indirizzi virtuali disponibile per l'utente è di 8 terra byte.Ma se il programma che stiamo eseguendo è in esecuzione in modalità compatibilità a 32 bit, è ancora disponibile così tanto spazio utente?oppure si comporta come un normale sistema operativo a 32 bit e offre solo 2 GB di spazio per gli indirizzi utente?

È stato utile?

Soluzione

Microsoft ha un grafico che mostra i vari limiti: Limiti di memoria per le versioni di Windows

Per riassumere solo lo spazio degli indirizzi virtuali in modalità utente:

  • Windows a 32 bit:
    • processo a 32 bit: 2 GB per impostazione predefinita; 3 GB con /LARGEADDRESSAWARE:YES e 4GT
  • Windows a 64 bit (architettura x64):
    • processo a 32 bit: 2 GB per impostazione predefinita; 4 GB con /LARGEADDRESSAWARE:NO
    • processo a 64 bit: 8 TB per impostazione predefinita; 2 GB con /3GB

4GT è un tuning da 4 gigabyte:

  • XP: bcdedit /set increaseuserva 3072 switch boot.ini
  • Vista: <=>

Mark Russinovich ha pubblicato un post sul blog che spiega molti di questi limiti: Pushing i limiti di Windows: memoria virtuale

Altri suggerimenti

Il processo vedrà uno spazio di indirizzi virtuali di 4 GB solo quando è in esecuzione come processo a 32 bit. Non sarà in grado di affrontare nulla di più elevato.

La mia risposta originale era piuttosto negativa. Ecco un link che spiega cosa stava dicendo abbastanza bene JaredPar.

http://msdn.microsoft.com/en-us/library /ms189334.aspx

Per quanto riguarda l'hardware, quando si esegue in modalità di compatibilità (ovvero IA32_EFER.LMA è impostato e il bit L è chiaro nel descrittore di segmento CS) i segmenti si comportano come segmenti a 32 bit. Cioè:

  • la base del segmento è limitata a 32 bit.
  • anche il limite di segmento è limitato a 32 bit (usando il bit G).

Ciò ti limita effettivamente a 4 GB di indirizzi virtuali. Non ho familiarità con il modo in cui il sistema operativo suddivide la memoria virtuale nelle varie modalità, ma questo è il limite hardware. (scusate ... sono un tipo hardware, non un esperto del sistema operativo)

Se il tuo programma è in esecuzione come processo a 32 bit sul sottosistema Wow64, vedrà lo stesso spazio indirizzo esatto che vedrebbe su un vero sistema operativo a 32 bit. Senza opzioni speciali, un processo a 32 bit avrà a disposizione 2 GB di memoria.

L'unica differenza è la memoria disponibile se si utilizza Opzione LargeAddressAware . In un normale processo a 32 bit ciò consente 3 GB di memoria indirizzabile. In un processo Wow64 può visualizzare fino a 4 GB ( Source )

Va notato che eseguendo un processo a 32 bit su IIS 6.0+ con un computer/sistema operativo a 64 bit, un processo può indirizzare fino a 4 GB di memoria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top