/BASE (Adresse de base)
Mise à jour : novembre 2007
/BASE:{address[,size] | @filename,key}
L'option /BASE définit une adresse de base pour le programme, en substituant l'emplacement par défaut d'un fichier .exe (à 0x400000) ou d'une DLL (à 0x10000000). Le système d'exploitation tente d'abord de charger un programme à l'adresse de base spécifiée ou à l'adresse de base par défaut. Faute de place, le système réaffecte le programme. Pour éviter le réadressage, utilisez l'option /FIXED.
L'éditeur de liens génère une erreur si address n'est pas un multiple de 64 Ko. Vous pouvez éventuellement spécifier la taille du programme afin que l'éditeur de liens vous avertisse si le programme possède une taille supérieure à celle qui est spécifiée.
Sur la ligne de commande, un autre moyen de spécifier l'adresse de base consiste à utiliser filename précédé du signe (@) et d'un argument key dans le fichier. L'argument filename est un fichier texte contenant les emplacements et les tailles de toutes les DLL que votre programme va utiliser. L'éditeur de liens recherche le filename dans le chemin d'accès spécifié ou, si celui-ci n'est pas mentionné, dans les répertoires spécifiés dans la variable d'environnement LIB. Chaque ligne de filename représente une DLL. Sa syntaxe est la suivante :
key address [size] ;comment
L'argument key est une chaîne de caractères alphanumériques et ne respecte pas la casse. Il s'agit en général du nom d'une DLL, mais ce n'est pas une obligation. L'argument key est suivi d'un argument address de base en langage C, en notation hexadécimale ou décimale et possède une taille maximale (argument size) facultative. Ces trois arguments sont séparés par des espaces ou des tabulations. L'éditeur de liens émet un avertissement si l'argument size spécifié est inférieur à l'espace d'adressage virtuel requis par le programme. Un commentaire (comment) est spécifié par un point virgule (;) ; il se trouve sur la même ligne ou sur une ligne différente. L'éditeur de liens ignore tout le texte compris entre le point-virgule et la fin de la ligne. Cet exemple affiche une partie d'un tel fichier :
main 0x00010000 0x08000000 ; for PROJECT.exe
one 0x28000000 0x00100000 ; for DLLONE.DLL
two 0x28100000 0x00300000 ; for DLLTWO.DLL
Si le fichier contenant ces lignes s'appelle DLLS.txt, l'exemple de commande suivant s'applique à ces informations :
link dlltwo.obj /dll /base:@dlls.txt,two
Notes
Vous pouvez réduire l'échange et améliorer les performances de votre programme en assignant des adresses de base de sorte que les DLL ne se chevauchent pas dans l'espace d'adressage.
Un autre moyen de définir l'adresse de base consiste à utiliser l'argument BASE dans une instruction NAME ou LIBRARY. Les options /BASE et /DLL réunies sont équivalentes à l'instruction LIBRARY.
Pour définir cette option de l'éditeur de liens dans l'environnement de développement Visual Studio
Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d'informations, consultez Définition des propriétés de projets Visual C++.
Cliquez sur le dossier Éditeur de liens.
Cliquez sur la page de propriétés Avancé.
Modifiez la propriété Adresse de base.
Pour définir cette option de l'éditeur de liens par programme
- Consultez BaseAddress.