![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| deniska |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
народ, у меня такой вопрос.
в каком случае работа приложения будет быстрее: 1.когда приложение статически подключает длл 2. динамически (GetProcAddress, LoadLibrary) приложение подключает одну длл а та, в свою очередь еще 2. надо выиграть во времени ОЧЕНЬ!!!! |
|||
|
||||
| Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: нет Всего: 5 |
В 1ом случае, поскольку при динамическом пользовании длл она будет загружаться и выгружаться часто(по мере необходимости). Так что если размер приложения не столь важен, то грузи все длл статически.
--------------------
|
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 3 Всего: 44 |
Я в этом не уверена. Когда ты делаешь LoadLibrary - она загружается и не выгрузится пока не осоводишь сам. Это в случае отложенной загрузки может быть. Лично мне, КАЖЕТСЯ, что загрузка рабоатть будет одинаково. Может токлько притормаживать на GetProcAdderss хотя не уверена. -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 2 Всего: 29 |
Думаю разницы никакой. Можно было бы подумать, что при предкомпилированном прикреплении запоминается адрес процедуры и не тратися время на поиск, но это не так. Проверяется просто: берём программу с библиотекой, к которым есть исходники. Переписываем библиотеку так, что процедуры будут иметь теже имена, но находится по совершенно другим адресам. Компилируем, запускаем - работает!.. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Нет никакой разницы. Если взять системную DLL предыдущей версии (скажем, от Win95) и подсунуть ее программе, использующей какие-либо функции NT...XP, то программа будет орать на загрузке, что ей для счастья не хватает такой-то функции (и по-моему даже GetProcAddress там упоминается). В общем, ровно через GetProcAddress или аналогичную функцию все ссылки и разрешаются при загрузке DLL: либо ты сам пишешь этот код, либо линкер генерирует таблицу, по которой все ссылки разрешаются стандартным кодом (а может, не линкер, не знаю). Использовать загрузку "вручную" неудобно - если функций много, да еще классы используются (там имена разукрашенные - черт ногу сломит). Да и поддерживать умаешься. Это имеет смысл только в одном случае: если есть набор DLL с одинаковым интерфейсом, из которых нужно выбрать в зависимости от контекста. Но тогда имеет смысл ограничить интерфейс до 1-2-3 функций, а все остальное крутить через них.
-------------------- ... |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |