Главная страница
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.49 MB
Время: 0.031 c
1-1078728474
rxman
2004-03-08 09:47
2004.03.28
Примеры к Indy...


11-1056787866
mox
2003-06-28 12:11
2004.03.28
Timer


14-1078092484
Piter
2004-03-01 01:08
2004.03.28
Новый клиент для форума


3-1077696867
LaidBack
2004-02-25 11:14
2004.03.28
Есть-ли способ быстрее?


14-1078230163
_none_
2004-03-02 15:22
2004.03.28
какие-то уроды спамят по почте