7.3. Использование умной компоновки

На верх  Назад  Вперёд

Вы можете компилировать ваши модули, используя умную компоновку. В этом случае компилятор создаёт серии блоков кода, которые будут настолько маленькими, насколько это возможно. То есть блок кода будет содержать только код для одной процедуры или функции.

Когда вы компилируете программу, которая использует модуль, созданный в режиме умной компоновки, то компилятор будет включать в код только те процедуры и функции, которые на самом деле необходимы, и будет пропускать весь остальной код. В результате получится небольшой двоичный файл, который будет быстрее загружаться в память, а, следовательно, быстрее выполняться.

Чтобы включить умную компоновку, нужно установить соответствующую опцию в командной строке: -Cx, или поместить директиву {$SMARTLINK ON} в файле модуля:

Unit Testunit
{SMARTLINK ON}
Interface

Умная компоновка замедляет процесс компиляции, особенно для больших модулей.

В случае если модуль foo.pp использует умную компоновку, имя файла изменится на libfoo.a.

Технически говоря, компилятор делает небольшие ассемблерные файлы для каждой процедуры или функции в модуле, как и для всех глобальных переменных (находятся ли они в разделе interface или нет). Затем он собирает эти небольшие файлы и использует ar для помещения результирующих объектных файлов в один архив.

Умная компоновка и создание общедоступных (или динамических) библиотек являются взаимоисключающими, то есть если вы включите умную компоновку, то создание общедоступных библиотек отключится. Создание статических библиотек остаётся возможным. Причиной этого является то, что при создании динамических библиотек умная компоновка не имеет смысла. Динамическая библиотека в любом случае загружается в память целиком при помощи динамического компоновщика (или операционной системы), так что вы не уменьшите размер, выполняя умную компоновку для динамической библиотеки.