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

86

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 système d'exploitation 64 bits, quelle quantité de mémoire est disponible? Y a-t-il des commutateurs ou des paramètres spéciaux qui peuvent changer cela?

jjxtra
la source

Réponses:

92

2 Go par défaut. Si l'application prend en charge les grands espaces d'adressage (liée à / 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 égal à zéro.

Michael
la source
5
Quelqu'un peut-il expliquer pourquoi les processus ne peuvent pas accéder aux 4 Go complets?
BlueTrin
1
Que voulez-vous dire? Si vous le construisez vous-même, vous pouvez utiliser l'indicateur / LARGEADDRESSAWARE et le faire fonctionner avec 4 Go, si vous ne l'avez pas fait, vous êtes à la merci des développeurs qui l'ont fait.
SilverbackNet
Est-ce parce que le pointeur pourrait dangereusement être interprété avec un complément à deux?
rosstex
1
Par cela - since many application depends on the top bit of pointers to be zerovous voulez dire que le 32ème bit du schéma d'adressage n'est pas pris en compte ou utilisé lors de la traversée de l'espace d'adressage du processus.
RBT
21

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 des pointeurs si vous définissez cet indicateur.

MSN
la source
-1: Le système utilisera des adresses 64 bits pour lui-même, il n'est donc pas nécessaire de soustraire quelque chose
Thomas Weller
@ThomasW., Ce n'est pas vrai, du moins sous Windows. WOW64 nécessite toujours des thunks 32 bits pour les appels système 64 bits. Voir msdn.microsoft.com/en-us/library/windows/desktop/…
MSN
1
Vous voulez dire ces 605 Ko de DLL? Désolé, je n'ai pas compris car la question portait davantage sur les Go de mémoire.
Thomas Weller
7
@ThomasW., C'est pourquoi j'ai dit "moins ce qui est utilisé par le système".
MSN
FYI Link mort sur celui-ci
jjxtra
14

Personne ne semble toucher au fait que si vous avez de nombreuses applications 32 bits différentes, le sous-système wow64 peut les mapper n'importe où dans la mémoire au-dessus de 4G, donc sur une fenêtre 64 bits avec une mémoire suffisante, vous pouvez exécuter beaucoup plus d'applications 32 bits que sur un système 32 bits natif.

Harm ten Napel
la source
7
Vous parlez de RAM physique, où l'OP parle de mémoire virtuelle. Même sur les systèmes 32 bits, vous pouvez exécuter de nombreuses applications, à condition que votre fichier d'échange soit suffisamment volumineux.
Thomas Weller
8

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 pas attribuer / résoudre une adresse mémoire supérieure à 32 bits.

Ben S
la source
4
Cela aurait été utile si vous aviez précisé que 32 bits correspondent à 4 Go d'espace.
Ingénieur
4

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 un IMAGE_FILE_LARGE_ADDRESS_AWAREbit défini, il a alors une limite de 4 Go, et non de 2 Go - voir https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx

Les choses que vous entendez à propos des indicateurs de démarrage spéciaux, 3 Go, des /3GBcommutateurs ou /uservaconcernent tous les systèmes d'exploitation 32 bits et ne s'appliquent pas sur 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 comme 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), qui a été introduite pour la première fois par Intel dans le Pentium Pro, puis par AMD dans le processeur Athlon - elle définit une hiérarchie de table de page à trois niveaux, avec des entrées de table de 64 bits chacune au lieu de 32, permettant à ces processeurs d'accéder directement à un espace d'adressage physique supérieur à 4 gigaoctets - donc théoriquement, un système d'exploitation 32 bits peut accéder théoriquement à 2 ^ 64 octets, ou 17.179.869.184 gigaoctets, mais le segment est limité à 4 Go. Cependant, pour des raisons marketing, Microsoft a limité la mémoire maximale accessible sur les systèmes d'exploitation non serveur à seulement 4 Go, voire 3 Go. Ainsi, un seul processus peut accéder à plus de 4 Go sur un système d'exploitation 32 bits - et le serveur Microsoft SQL en est un exemple.

Les processus 32 bits sous Windows 64 bits ne présentent aucun inconvénient par rapport aux processus 64 bits en utilisant l'espace d'adressage virtuel du noyau partagé (également appelé espace système ). Tous les processus, qu'ils soient 64 bits ou 32 bits, sous Windows 64 bits partagent le même espace système 64 bits.

Étant donné que l'espace système est partagé entre tous les processus , sous Windows 32 bits , les processus qui créent une grande quantité de descripteurs (comme les threads, les sémaphores, les fichiers, etc.) consomment de l'espace système par les objets du noyau et peuvent même manquer de mémoire si vous avez beaucoup de mémoire disponible au total. En revanche, sur Windows 64 bits , l'espace du noyau est de 64 bits et n'est pas limité à 4 Go. Tous les appels système effectués par les applications 32 bits sont convertis en appels 64 bits natifs en mode utilisateur .

Maxim Masiutin
la source
1
Cette question concerne la quantité de mémoire qu'un seul processus peut accéder. C'est limité par l'espace d'adressage de la mémoire virtuelle 32 bits. Bien sûr, vous pouvez avoir plusieurs processus 32 bits utilisant chacun 4 Go sur le même ordinateur, même avec un système d'exploitation 32 bits utilisant PAE. Mais ce n'est pas ce que demande cette question.
Peter Cordes
@PeterCordes - désolé, et merci - j'ai mis à jour la réponse concernant la limite de 2 Go / 4 Go.
Maxim Masiutin
@PeterCordes, merci pour votre remarque, j'ai mis à jour la réponse pour souligner que plusieurs processus 32 bits peuvent chacun utiliser 4 Go sur le même ordinateur, même avec un système d'exploitation 32 bits utilisant PAE, et que les processus 32 bits sous 64- bit OS ne souffre pas de la limitation d'espace système de 2 Go, ce qui était un problème sous OS 32 bits.
Maxim Masiutin le
-1

Vous avez la même restriction de base lors de l'exécution d'un processus 32 bits sous Win64. Votre application fonctionne dans un sous-système 32 mais qui fait de son mieux pour ressembler à Win32, et cela inclura les restrictions de mémoire pour votre processus (2 Go inférieurs pour vous, 2 Go supérieurs pour le système d'exploitation)

Sean
la source
-11

La limite n'est pas de 2g ou 3gb, ses 4gb pour 32 bits.

La raison pour laquelle les gens pensent que son 3 Go est que le système d'exploitation affiche 3 Go de libre alors qu'ils ont vraiment 4 Go de RAM système.

Sa RAM totale de 4 Go. Donc, si vous avez une carte vidéo de 1 Go qui compte comme faisant partie de la RAM totale visualisée par le système d'exploitation 32 bits.

4Gig pas 3 pas 2 compris?

BobJ
la source
2
C'est incorrect. Pour un système x86 standard (sans extensions de mémoire), le noyau peut accéder à la totalité de 4 Go d'espace mémoire (même si l'ordinateur n'a que 1 Go de RAM en raison de la pagination). Le noyau réserve les 2 Go supérieurs (certains noyaux réservent 1 Go ou 3 Go à la place) pour son propre usage. La mémoire virtuelle de chaque processus a également la mémoire réservée du noyau mappée et le processus ne peut donc pas utiliser 2 Go de mémoire.
Alex Jorgenson
3
De plus, les cartes vidéo n'ont rien à voir avec la quantité de mémoire qu'un processus peut utiliser. Les tables ACPI, les E / S mappées en mémoire, etc. utilisent des adresses mémoire physiques, mais cela est évité grâce à la mémoire virtuelle.
Alex Jorgenson
1
Ceci est une erreur. Microsoft a choisi (choix de conception) de diviser l' espace d'adressage virtuel 32 bits avec Windows NT de sorte que 2 Go soient réservés pour le mappage du système d'exploitation (pilote / API / appels système, etc.) et 2 Go restants pour l'utilisation de l'application. Le commutateur de démarrage / 3 Go modifie ce comportement (1 Go pour le mappage du système d'exploitation, 3 Go pour le code d'application). Je laisse la recherche de l'ancienne documentation sur l'architecture de mémoire virtuelle Windows NT 3.x comme exercice pour le lecteur :-)
ripvlan