Adresse de base de l'image

De RAD Studio
Aller à : navigation, rechercher

Remonter à Liste des directives de compilation Delphi - Index


Type

Paramètre

Syntaxe

{$IMAGEBASE nombre}

Par défaut

{$IMAGEBASE $00400000}

Portée

Globale



La directive $IMAGEBASE contrôle l'adresse de chargement par défaut pour une application, une DLL ou un package. L'argument nombre doit être une valeur d'entier 32 bits spécifiant l'adresse de base de l'image. L'argument nombre doit être supérieur ou égal à $00010000. Les 16 bits inférieurs de l'argument sont ignorés et doivent être à zéro. Le nombre doit être un multiple de 64K (c'est-à-dire, un nombre hexadécimal dont les quatre derniers chiffres sont nuls) ; sinon, il sera arrondi vers le bas à la valeur du multiple le plus proche et vous recevrez un message du compilateur.

Lorsqu'un module (application ou bibliothèque) est chargé dans l'espace d'adresse d'un traitement, Windows essaiera de placer le module à son adresse de base d'image par défaut. S'il ne réussit pas, c'est-à-dire si la portée d'adresse donnée est déjà réservée par un autre module, le module est repositionné à une adresse déterminée à l'exécution par Windows.

Il est rare de devoir changer l'adresse de base de l'image d'une application. Pour une bibliothèque, cependant, il est conseillé d'utiliser la directive $IMAGEBASE pour spécifier une adresse de base d'image qui ne soit pas celle par défaut, puisque l'adresse par défaut $00400000 ne sera certainement jamais disponible. L'intervalle des adresses conseillées d'images DLL est compris entre $40000000 et $7FFFFFFF. Les adresses de cet intervalle sont toujours disponibles pour un traitement dans Windows NT/2000 et dans Windows 95/98.

Lorsque Windows réussit à charger une DLL (ou un package) à son adresse de base de l'image, le temps de chargement est diminué car les repositionnements ne sont pas nécessaires. De surcroît, lorsque la portée d'adresse donnée est disponible dans plusieurs traitements utilisant la bibliothèque, les portions de code de l'image de la bibliothèque peuvent être partagées entre les traitements, réduisant alors le temps de chargement et la consommation de mémoire.

Remarque :  La directive $IMAGEBASE remplace toute valeur fournie par l'option -K du compilateur en ligne de commande.