Таненбаум Э.- Архитектура компьютера. стр.419

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

Важно понимать, что процедура в DLL-файле не имеет отличительных признаков (как процессы или программные потоки). Она работает в потоке вызывающей программы и для своих локальных переменных использует стек вызывающей программы. Она может содержать статические данные, специфичные для процесса (а также общие), а в остальном работает, как статически скомпонованная процедура. Единственным существенным различием является способ установления связи.

Динамическая компоновка в UNIX

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

UNIX поддерживает только неявную компоновку, поэтому библиотека коллективного доступа состоит из двух частей: главной библиотеки (host library), которая статически скомпонована с исполняемым файлом, и целевой библиотеки (target library), которая вызывается во время работы программы. Несмотря на некоторые различия в деталях, по существу эта концепция соответствует концепции DLL.

Краткое содержание главы

Хотя большинство программ можно и нужно писать на языках высокого уровня, существуют такие ситуации, в которых необходимо применять язык ассемблера, по крайней мере, отчасти. Сюда можно отнести программы для компьютеров с недостаточным объемом ресурсов (например, процессоры для смарт-карт, различных приборов, портативных цифровых устройств). Ассемблерная программа — это символьное представление программы на том или ином машинном языке. Она транслируется на машинный язык специальной программой, которая называется ассемблером.

Если для какого-либо приложения требуется высокое быстродействие, лучше всего сначала написать программу на языке высокого уровня, затем путем тестов установить, исполнение какой части программы занимает большую часть времени, и переписать на ассемблере только эти части программы. Практика показывает, что часто небольшая часть всей программы занимает большую часть всего времени выполнения этой программы.

Во многих ассемблерах предусмотрены макросы, которые позволяют программистам давать символические имена целым последовательностям команд. Обычно эти макросы могут быть параметризированы. Макросы реализуются с помощью алгоритма обработки строковых литералов.


⇐ Предыдущая страница| |Следующая страница ⇒