Augmentation de l'espace d'adressage de la mémoire

De RAD Studio
Aller à : navigation, rechercher

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

  1. Assurez-vous que le système d'exploitation supporte un espace d'adressage plus grand :
  2. 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.
  3. 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.

Voir aussi