/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

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

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

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

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

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

  • Дополнительные сведения см. в разделе BaseAddress.

См. также

Ссылки

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

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