Главная страница
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.026 c
3-1077877254
Алексей
2004-02-27 13:20
2004.03.28
DbGrid выделенные строки


8-1069686747
NetKnight
2003-11-24 18:12
2004.03.28
Как уменьшить JPEG, как это делает Photoshop без потери качества?


3-1077209075
Wild
2004-02-19 19:44
2004.03.28
SQL


3-1078069363
VID
2004-02-29 18:42
2004.03.28
Как в FastReport нЕвыводить текущую строку ?


11-1056796781
Vladimir Kladov
2003-06-28 14:39
2004.03.28
Нужно связаться с Roman Vorobets