Ce n'est pas tout à fait clair à partir de votre question ou de l'image, mais avec le 'System Address Space', vous voulez probablement dire que la zone entre 2 Go et 4 Go. Cela prend en effet la moitié de l'espace théorique de 4 Go, mais il y a une raison valable pour cela.
Normalement avec 32 bits vous pouvez adresser 4 Go de mémoire (2^32 = 4294967296) donc il semblerait logique d'avoir 4 Go d'espace d'adressage, pas 2 Go. La raison est la suivante: Supposons que vous ayez 2 pointeurs, comme celui-ci en C/C++:
char *ptr1;
char *ptr2;
Je veux maintenant savoir quelle est la différence entre les deux pointeurs, comme ceci:
offset = ptr2 - ptr1;
Quel devrait être le type de données 'offset'? Si nous ne savons pas si ptr1 vient avant ptr2 ou vice versa, le décalage peut être positif ou négatif. Maintenant, si ptr1 ou ptr2 sont tous deux compris entre 0 et 2 Go, le décalage est toujours compris entre -2147483648 et +2147483647, ce qui correspond exactement à un entier signé de 4 octets. Toutefois, si ptr1 et ptr2 pouvaient accéder à l'espace d'adressage complet de 4 Go, le décalage se situerait entre -4294967296 et +4294967295, ce qui ne correspond plus à un entier signé de 4 octets. Si vous êtes sûr que vous ne faites jamais ce genre de calculs dans votre application, ou si vous êtes sûr que si vous soustrayez 2 pointeurs, ils ne seront jamais plus éloignés que 2 Go (ou vos vecteurs sont toujours plus petits que 2) GB), vous pouvez indiquer à l'éditeur de liens (Windows, Visual Studio) que votre application est LARGEADDRESSAWARE. Cet indicateur de liaison définit un bit dans l'exécutable, et si un Windows 32 bits est démarré correctement (sous XP, vous devez démarrer avec le flag/3GB), Windows vous donne 3GB au lieu de 2GB (uniquement pour les exécutables LARGEADDRESSAWARE). Le 1 Go restant est toujours utilisé pour les structures de données du système d'exploitation (mais je n'ai pas de détails à leur sujet).
Si vous utilisez Windows 64 bits, les choses deviennent encore plus intéressantes, car les exécutables LARGEADDRESSAWARE obtiendront 4 Go de mémoire. Apparemment, les structures de données du système d'exploitation sont maintenant stockées quelque part dans l'espace d'adressage de 64 bits, en dehors des 4 Go utilisés par l'application.
Espérons que cela clarifie un peu.
J'ai de mauvaises nouvelles pour vous. Ce que vous voulez ne peut pas être fourni. Cela dépend non seulement du système d'exploitation, mais également de la version du système d'exploitation utilisée. En outre, votre diagramme d'espace d'adresses utilisateur est également incomplet et dépend beaucoup du compilateur que vous utilisez et de la version qui s'y trouve. –
Seulement deux principaux systèmes d'exploitation? –
@JUST MY correcte OPINION: 'Aussi, votre diagramme d'espace adresse de l'utilisateur est également incomplète': Comment? J'ai toujours pensé que c'était complet. Et comment cela dépend du compilateur? Je pensais que cela ne dépend que du système d'exploitation. – claws