/BASE (базовый адрес)

Обновлен: Ноябрь 2007

/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

  1. Откройте диалоговое окно Окна свойств проекта. Дополнительные сведения см. в разделе Задание свойств проекта Visual C++.

  2. Выберите папку Компоновщик.

  3. Выберите страницу свойств Дополнительно.

  4. Измените свойство Базовый адрес.

Установка данного параметра компоновщика программным способом

См. также

Ссылки

Настройка параметров компоновщика

Параметры компоновщика