Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

частый вызов DLL   Найти похожие ветки 

 
Lena19   (2004-03-11 23:09) [0]

всем привет
у меня вопрос, емеет ли смысл
выносить функцию в DLL  если ета функция
используется в приложении очень часто (милионы раз)
или лучше оставить в основном пректе
как будет быстрее работать прога ?


 
VMcL ©   (2004-03-11 23:11) [1]

>>Lena19  (11.03.04 23:09)

Функция линкуется статически или динамичеески?


 
Lena19   (2004-03-11 23:17) [2]

TO VMcL
я чтото не поняла
DLL сама посабеже динамическая
---- можно по подробнее ? -------


 
Thomas Brandon   (2004-03-11 23:23) [3]


> Lena19  
Сударыня, существует два способа загрузки DLL: явная (implicit) и неявная (explicity). Какая применена у Вас?


 
Алхимик ©   (2004-03-11 23:24) [4]

> Функция линкуется статически или динамичеески?
Для понимания
http://www.delphimaster.ru/articles/usedll/index.html


 
Гаврила   (2004-03-11 23:26) [5]

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


 
VMcL ©   (2004-03-11 23:26) [6]

статически:
procedure xyz; external "some.dll" name "xyz";

динамичеески:
var
 xyz: procedure;
// ...
 @xyz := GetProcAddress(...);

В первом случае будет call $87654321 на косвенный JMP вида:
jmp dword ptr [$12345678]
где $12345678 - адрес функции в DLL

Во втором случае:
просто косвенный call вида
call dword ptr [$abcdef01]
где $abcdef01 - адрес переменной xyz

В общем разница, по сравнению с функцией в EXE очень незначительная.


 
VMcL ©   (2004-03-11 23:29) [7]

Sorry.

В первом случае будет call $87654321 на косвенный JMP вида:
jmp dword ptr [$12345678]
где $87654321 - адрес вышеуказанного JMP, а $12345678 - адрес переменной, хранящей адрес функции из DLL.


 
Lena19   (2004-03-11 23:37) [8]

в моем случае используется статический вызов
но переделать на динамический не сложно. главное скорость


 
evvcom   (2004-03-11 23:56) [9]

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


 
Юрий Зотов ©   (2004-03-12 05:00) [10]

> Lena19всем привет

Есть смысл выносить функцию в DLL, если этв функция используется НЕСКОЛЬКИМИ Вашими программами. Это и есть основная идея DLL - сокращение объема программ за счет совместно используемых ими библиотек.

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



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.022 c
1-1078731479
Hunter
2004-03-08 10:37
2004.03.28
Explorer


1-1078927091
slair
2004-03-10 16:58
2004.03.28
Не ставится delpi6/builder6 под WindowsXP Pro Corp


1-1078391917
AlexanderSK
2004-03-04 12:18
2004.03.28
Доступ к объекту из нескольких потоков


7-1073342616
Barlokf
2004-01-06 01:43
2004.03.28
Проверка реестра


14-1077785755
Андрей Сенченко
2004-02-26 11:55
2004.03.28
Перекрытие штатной функции ( процедуры )





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский