Spazio degli indirizzi virtuali nei sistemi a 64 bit in esecuzione in modalità compatibilità
-
20-08-2019 - |
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?
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
- processo a 32 bit: 2 GB per impostazione predefinita; 3 GB con
- 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
- processo a 32 bit: 2 GB per impostazione predefinita; 4 GB con
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.
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.