web-dev-qa-db-fra.com

Combien de mémoire un processus 32 bits peut-il accéder sur un système d'exploitation 64 bits?

Sous Windows, dans des circonstances normales, un processus 32 bits ne peut accéder qu'à 2 Go de RAM (ou 3 Go avec un commutateur spécial dans le fichier boot.ini). Lors de l'exécution d'un processus 32 bits sur un fichier 64 bits système d’exploitation, combien de mémoire est disponible? Y at-il des commutateurs spéciaux ou des paramètres qui peuvent changer cela?

79
jjxtra

2 Go par défaut. Si l'application prend en charge les grands espaces d'adressage (liés à/LARGEADDRESSAWARE), elle obtient 4 Go (et non 3 Go, voir http://msdn.Microsoft.com/en-us/library/aa366778.aspx =)

Ils sont toujours limités à 2 Go car de nombreuses applications dépendent du bit supérieur des pointeurs pour être nul.

80
Michael

4 Go moins ce qui est utilisé par le système si vous vous connectez avec/LARGEADDRESSAWARE.

Bien sûr, vous devriez être encore plus prudent avec l'arithmétique de pointeur si vous définissez cet indicateur.

18
MSN

Personne ne semble parler du fait que, si vous avez plusieurs applications 32 bits différentes, le sous-système wow64 peut les mapper n'importe où dans la mémoire supérieure à 4G. que sur un système 32 bits natif.

14
Harm ten Napel

Un processus 32 bits est toujours limité aux mêmes contraintes dans un système d'exploitation 64 bits. Le problème est que les pointeurs de mémoire ne font que 32 bits de large, de sorte que le programme ne peut attribuer/résoudre aucune adresse mémoire supérieure à 32 bits.

7
Ben S

Un seul processus 32 bits sous un système d'exploitation 64 bits est limité à 2 Go. Mais s'il est compilé dans un fichier EXE avec le bit IMAGE_FILE_LARGE_ADDRESS_AWARE défini, sa limite est alors de 4 Go, et non de 2 Go - voir https://msdn.Microsoft.com/en-us/library/aa366778). .85) .aspx

Dans les deux cas, l'espace d'adressage virtuel du noyau est partagé par tous les processus. C’est pourquoi, même si vous avez un très grand nombre de processus 32 bits, ils peuvent manquer de mémoire malgré le fait que vous avez beaucoup de mémoire disponible pour votre système d’exploitation 64 bits, par exemple 16 Go - le format 32 bits. Au total, tous les processus peuvent rapidement manquer d'espace d'adressage virtuel du noyau (maximum de 2 Go).

Les choses que vous entendez sur les drapeaux de démarrage spéciaux, les commutateurs 3 Go,/3GB ou/userva concernent les systèmes d'exploitation 32 bits et ne s'appliquent pas sous Windows 64 bits.

Voir https://msdn.Microsoft.com/en-us/library/aa366778 (v = vs.85) .aspx pour plus de détails.

En ce qui concerne les systèmes d'exploitation 32 bits, contrairement à ce que l'on pense, il n'y a pas de limite physique de 4 Go pour les systèmes d'exploitation 32 bits. Par exemple, les systèmes d’exploitation serveur 32 bits tels que Microsoft Windows Server 2008 32 bits peuvent accéder à jusqu’à 64 Go (Éditions Windows Server 2008 Enterprise et Datacenter) - au moyen de l'extension d'adresse physique (PAE), introduite pour la première fois par Intel dans Pentium Pro, puis par AMD dans le processeur Athlon - elle définit une hiérarchie de table de pages à trois niveaux, avec des entrées de table de 64 bits chacune au lieu de 32, ce qui permet à ces CPU d’accéder directement à un espace d’adresse physique supérieur à 4 gigaoctets. Ainsi, en théorie, un système d’exploitation 32 bits peut accéder à 2 ^ 64 octets, ou à 17 179 869 184 gigaoctets, mais le segment est limité par 4GB. Toutefois, pour des raisons de marketing, Microsoft a limité la mémoire maximale accessible sur les systèmes d'exploitation non serveur à 4 Go voire à 3 Go de manière efficace. Ainsi, un seul processus peut accéder à plus de 4 Go sur un système d’exploitation 32 bits - Microsoft SQL Server en est un exemple.

3
Maxim Masiutin