Augmentation de l'espace d'adressage de la mémoire
Remonter à Gérer la mémoire - Index
Cette section décrit comment étendre l'espace d'adressage du gestionnaire de mémoire au-delà de 2 Go sur Win32.
Remarque : La taille par défaut de l'espace d'adressage du mode utilisateur pour une application Win32 est de 2 Go, mais elle peut être augmentée facultativement jusqu'à 3 Go sur Windows 32 bits, et 4 Go sur Windows 64 bits. L'espace d'adressage est toujours quelque peu fragmenté, il est ainsi peu probable qu'une demande GetMem d'un bloc contigu unique supérieur à 1 Go aboutisse, même avec un espace d'adressage de 4 Go.
Pour activer et utiliser un espace d'adressage plus grand
- Assurez-vous que le système d'exploitation supporte un espace d'adressage plus grand :
- Les éditions 64 bits de Windows prennent en charge un espace d'adressage du mode utilisateur supérieur à 2 Go.
- Pour activer un espace d'adressage 3 Go dans les éditions 32 bits des versions supportées de Windows, exécutez la commande
bcdedit /set {ID} increaseuserva 3072
. Voir 4-Gigabyte Tuning: BCDEdit and Boot.ini, MSDN Documentation (EN).
- Définissez la directive du lieur appropriée. Le système d'exploitation doit être informé par l'intermédiaire d'un indicateur dans l'en-tête du fichier exécutable que l'application prend en charge un espace d'adressage en mode utilisateur supérieur à 2 Go. Sinon, il ne prendra en compte que 2 Go. Pour définir cet indicateur, spécifiez {$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} dans le fichier .dpr de l'application.
- Assurez-vous que toutes les bibliothèques et composants tiers prennent en charge l'espace d'adressage plus grand. Avec un espace d'adressage de 2 Go, le bit de poids fort de tous les pointeurs est toujours égal à 0. Ainsi, un espace d'adressage plus grand peut révéler des bogues arithmétiques de pointeur qui n'avaient pas présenter auparavant des symptômes. De tels bogues surviennent généralement quand des pointeurs sont transtypés en entiers au lieu de cardinaux lors de comparaisons ou d'opérations arithmétiques de pointeurs.
Remarque : L'alignement de la mémoire allouée à travers le gestionnaire de mémoire est garantie sur au moins des frontières de 8 octets. L'alignement 16 octets est utile quand des blocs de mémoire sont manipulés avec des instructions SSE, mais il peut augmenter l'utilisation de la mémoire. L'alignement de bloc minimum garanti pour les allocations à venir peut être défini avec SetMinimumBlockAlignment.