/BASE (базовый адрес)
/BASE:{address[,size] | @filename,key}
Параметр /BASE задает базовый адрес программы, переопределяя заданное по умолчанию расположение EXE-файла (0x400000) или DLL-файла (0x10000000).Сначала операционная система пытается загрузить программу по указанному или используемому по умолчанию базовому адресу.Если по этому адресу недостаточно места, то система перемещает программу в памяти.Для предотвращения перемещения используется параметр /FIXED.
Если указанный адрес address не кратен 64 Кбит, компоновщик выдает ошибку.При необходимости можно также указать размер программы, чтобы компоновщик мог выдать предупреждение в случае, если программа не помещается в заданные таким образом пределы.
Другим способом задания базового адреса в командной строке является использование имени_файла, предваряемого знаком "@" (коммерческое at); в файле должен быть задан параметр key.Здесь файл имя_файла — это текстовый файл, содержащий базовые адреса и размеры всех библиотек DLL, используемых программой.Компоновщик будет искать файл имя_файла либо по указанному пути, либо, если путь не указан, в каталогах, определенных в переменной среды LIB.Каждая строка в файле имя_файла соответствует отдельной библиотеке DLL и имеет следующий синтаксис:
key address [size] ;comment
Параметр key — это строка, состоящая из буквенно-цифровых знаков и задаваемая без учета регистра.Обычно это имя библиотеки DLL, хотя это необязательно.За параметром key следует базовый адрес address, заданный в C-нотации, шестнадцатеричном или десятичном формате, и необязательный максимальный размер size.Все три аргумента разделяются пробелами или знаками табуляции.Если указанный размер size меньше, чем виртуальное пространство, необходимое для программы, то компоновщик выдаст предупреждение.Комментарий comment отделяется точкой с запятой (";") и может стоять на той же самой или новой строке.Компоновщик пропускает весь текст от точки с запятой до конца строки.В этом примере показана часть подобного файла:
main 0x00010000 0x08000000 ; for PROJECT.exe
one 0x28000000 0x00100000 ; for DLLONE.DLL
two 0x28100000 0x00300000 ; for DLLTWO.DLL
Если файл, содержащий эти строки, называется DLLS.txt, то для применения заданных в нем сведений можно использовать, например, такую команду:
link dlltwo.obj /dll /base:@dlls.txt,two
Заметки
Распределяя базовые адреса так, чтобы библиотеки DLL не перекрывали друг друга в адресном пространстве, можно снизить количество подкачиваемых страниц и повысить производительность программы.
Еще один способ задания базового адреса — это использование аргумента BASE в операторе NAME или LIBRARY.Вместе параметры /BASE и /DLL эквивалентны оператору LIBRARY.
Установка данного параметра компоновщика в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта.Дополнительные сведения см. в разделе Задание свойств проекта C++.
Выберите папку Компоновщик.
Выберите страницу свойств Дополнительно.
Измените свойство Базовый адрес.
Установка данного параметра компоновщика программным способом
- Дополнительные сведения см. в разделе BaseAddress.