Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > какая линковка длл быстрее?


Автор: deniska 3.8.2005, 10:26
народ, у меня такой вопрос.
в каком случае работа приложения будет быстрее:
1.когда приложение статически подключает длл
2. динамически (GetProcAddress, LoadLibrary)

приложение подключает одну длл а та, в свою очередь еще 2.

надо выиграть во времени ОЧЕНЬ!!!!

Автор: Nemesis 3.8.2005, 12:21
В 1ом случае, поскольку при динамическом пользовании длл она будет загружаться и выгружаться часто(по мере необходимости). Так что если размер приложения не столь важен, то грузи все длл статически.

Автор: Nastya 5.8.2005, 10:38
Цитата
В 1ом случае, поскольку при динамическом пользовании длл она будет загружаться и выгружаться часто(по мере необходимости). Так что если размер приложения не столь важен, то грузи все длл статически.

Я в этом не уверена.
Когда ты делаешь LoadLibrary - она загружается и не выгрузится пока не осоводишь сам.
Это в случае отложенной загрузки может быть.
Лично мне, КАЖЕТСЯ, что загрузка рабоатть будет одинаково. Может токлько притормаживать на GetProcAdderss хотя не уверена.

Автор: ManiaK 5.8.2005, 14:25
Цитата(Nastya @ 5.8.2005, 11:38)
Может токлько притормаживать на GetProcAdderss хотя не уверена.

Думаю разницы никакой. Можно было бы подумать, что при предкомпилированном прикреплении запоминается адрес процедуры и не тратися время на поиск, но это не так. Проверяется просто: берём программу с библиотекой, к которым есть исходники. Переписываем библиотеку так, что процедуры будут иметь теже имена, но находится по совершенно другим адресам. Компилируем, запускаем - работает!..

Автор: Earnest 6.8.2005, 07:47
Нет никакой разницы. Если взять системную DLL предыдущей версии (скажем, от Win95) и подсунуть ее программе, использующей какие-либо функции NT...XP, то программа будет орать на загрузке, что ей для счастья не хватает такой-то функции (и по-моему даже GetProcAddress там упоминается). В общем, ровно через GetProcAddress или аналогичную функцию все ссылки и разрешаются при загрузке DLL: либо ты сам пишешь этот код, либо линкер генерирует таблицу, по которой все ссылки разрешаются стандартным кодом (а может, не линкер, не знаю). Использовать загрузку "вручную" неудобно - если функций много, да еще классы используются (там имена разукрашенные - черт ногу сломит). Да и поддерживать умаешься. Это имеет смысл только в одном случае: если есть набор DLL с одинаковым интерфейсом, из которых нужно выбрать в зависимости от контекста. Но тогда имеет смысл ограничить интерфейс до 1-2-3 функций, а все остальное крутить через них.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)