Espace d'adressage virtuel sur les systèmes 64 bits fonctionnant en mode de compatibilité
-
20-08-2019 - |
Question
J'ai constaté que sur un système d'exploitation Windows 64 bits, l'espace d'adressage virtuel disponible pour l'utilisateur était de 8 terra octets. Mais si le programme sur lequel nous travaillons s'exécute en mode de compatibilité 32 bits, est-ce qu'une grande partie de l'espace utilisateur est toujours disponible? ou se comporte-t-il comme un système d’exploitation 32 bits normal et ne donne-t-il que 2 Go d’espace adresse utilisateur?
La solution
Microsoft dispose d'un graphique indiquant les différentes limites: Limites de mémoire pour les versions Windows
Pour résumer uniquement l'espace d'adressage virtuel en mode utilisateur:
- Windows 32 bits:
- Processus 32 bits: 2 Go par défaut; 3 Go avec
/LARGEADDRESSAWARE:YES
et 4GT
- Processus 32 bits: 2 Go par défaut; 3 Go avec
- Windows 64 bits (architecture x64):
- Processus 32 bits: 2 Go par défaut; 4 Go avec
/LARGEADDRESSAWARE:NO
- Processus 64 bits: 8 To par défaut; 2 Go avec
/3GB
- Processus 32 bits: 2 Go par défaut; 4 Go avec
4GT est un réglage de 4 gigaoctets:
- XP:
bcdedit /set increaseuserva 3072
commutateur boot.ini - Vista: <=>
Mark Russinovich a publié un article dans un blog expliquant ces nombreuses limites: Pousser les limites de Windows: mémoire virtuelle
Autres conseils
Votre processus ne verra qu'un espace d'adressage virtuel de 4 Go s'il s'exécute en tant que processus 32 bits. Il ne pourra rien adresser de plus haut.
Ma réponse initiale était plutôt mauvaise. Voici un lien qui explique très bien ce que JaredPar disait.
En ce qui concerne le matériel, lorsque vous utilisez le mode de compatibilité (c'est-à-dire que IA32_EFER.LMA est activé et que le bit L est vide dans le descripteur de segment de CS), les segments se comportent comme des segments de 32 bits. C'est-à-dire:
- la base du segment est limitée à 32 bits.
- la limite de segment est également limitée à 32 bits (en utilisant le bit G).
Cela vous limite effectivement à 4 Go d'adresses virtuelles. Je ne connais pas bien la façon dont le système d'exploitation partitionne la mémoire virtuelle dans les différents modes, mais ceci correspond à la limite matérielle. (désolé ... je suis un gars du matériel, pas un expert en système d'exploitation)
Si votre programme s'exécute en tant que processus 32 bits sur le sous-système Wow64, il verra exactement le même espace adresse que sur un système d'exploitation 32 bits réel. Sans options spéciales, un processus 32 bits disposera de 2 Go de mémoire disponible.
La seule différence est la mémoire disponible si vous utilisez le Option LargeAddressAware . Dans un processus normal à 32 bits, cela permet de disposer de 3 Go de mémoire adressable. Dans un processus Wow64, il peut afficher jusqu'à 4 Go ( Source )
Il convient de noter qu’en exécutant un processus 32 bits sur IIS 6.0+ avec un ordinateur / système d'exploitation 64 bits, un processus peut traiter jusqu'à 4 Go de mémoire.