![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Для чего и как пользоваться оператором Inline
DelphiLexx © (2004-10-04 15:37:00)В С++ я часто встречаю использования Inline в функциях, которые должны
быстро работать.
Вопрос: Как пользоваться данным оператором в Delphi. В help'e про него
очень мало инфы.
Суслик (2004-10-05 14:18:00) [1]
> И слава богу. Да здравствует ООП!
иногда нужно :)
особенно если некая функци вызывается несколько млн раз. Если это место критично по времени, то экономия всегда приятна. Не находишь?
Могу привести пример того, когда это нужно.
У меня приятель работал в самом известном отеч. поисковом сервере. Движок у них был на ++. Сервак распределенный, 40 машин по $6000 каждая. Втала задача убрать две машины. По тестам этого делать было нельзя. 2 дня работы с установкой inline около некоторых функций позволили убрать целих 3 машины при сохранении производительности. 18 штук - неплохо, а?
Warlock (2004-10-05 13:33:00) [2]Суслик © (05.10.04 12:52) [31]
И слава богу. Да здравствует ООП!
Суслик (2004-10-05 12:52:00) [3]Маленькая лекция.
Inline в сях около функции инструктирует компилятор, что тело функции надо встраивать в каждое место вызова функции. Это позволяет избежать потерь времени на вызове функции. Компилятор не обязан делать встраивание, когда это не возможно (большие фукции, сложные функции, рекурсия и пр.), но старается учеть пожелания программиста.
Ничего подобного в дельфи нет.
KSergey (2004-10-05 12:48:00) [4]Так, друзья. Простите за тон, но
Давайте вначале все, кто не знает что значит inline в C++ таки узнает, а потом будет говорить про ассемблерные вставки и прочую глупость. Вернее - уже не будет ;)
Суслик (2004-10-05 12:19:00) [5]
> [28] Amoeba © (05.10.04 11:49)
и так двадцать раз подряд, пока не станет понятно, что к inline в паскале и дельфи вопрос отношения не имеет. :)))
Amoeba (2004-10-05 11:49:00) [6]А это из справки по Delphi:
The built-in assembler is accessed through asm statements, which have the form
asm statementList end
where statementList is a sequence of assembler statements separated by semicolons, end-of-line characters, or Object Pascal comments.
Comments in an asm statement must be in Object Pascal style. A semicolon does not indicate that the rest of the line is a comment.
The reserved word inline and the directive assembler are maintained for backward compatibility only. They have no effect on the compiler.
GuAV (2004-10-04 19:51:00) [7]
> На скорость повлиять может только inline [24].
А eго можно заменить asm...end в котором DB :-)
Defunct (2004-10-04 18:24:00) [8]Один из inline из справки BC:
inline (keyword)
Declares/defines C++ inline functions
Syntax:
<datatype> <function>(<parameters>) { <statements>; }
inline <datatype> <class>::<function> (<parameters>) { <statements>; }
In C++, you can both declare and define a member function within its class.
Such functions are called inline.
PS: В справке по C++ есть аж 3 разных Inline, так что поди разбери о чем спрашивалось в вопросе.
> В С++ я часто встречаю использования Inline в функциях, которые должны
На скорость повлиять может только inline [24].
Суслик (2004-10-04 18:11:00) [9]
> [24] Defunct © (04.10.04 18:09)
вот, когда я от тебя увижу описание inline из с++, тогда и будем сравнивать, то это о чем спрашивал автор или нет :))))
Defunct (2004-10-04 18:09:00) [10]> да не тот это inline :)
Именно тот
Из справки BP:
inline (reserved word)
Inline statements and directives allow you to
insert machine code instructions directly into
the code of a program or unit.
Syntax:
inline ( data / data / ... data )
Remarks:
When used as a statement, the inline data
elements are inserted directly in the code.
When used as a directive in a procedure or a
function declaration, the inline data elements
are inserted in the code each time the
procedure or function is called.
An inline data element consists of a constant
or variable identifier, optionally prefixed by
a size specifier, < or >.
A variable identifier can be followed by +
(plus) or - (minus) and a constant to specify
an offset from the variable's address.
An inline element generates 1 byte of code if
it is a constant within the range 0 and 255;
otherwise, it generates one word.
You use the < and > operators to override the
automatic size selection:
< means always generate a byte
> means always generate a word.
Example:
(* "inline" statement *)
procedure FillWord(var Dest; Count: Word; Data: Word);
begin
inline(
$C4/$7E/<Dest/ (* LES DI,Dest[BP] *)
$8B/$4E/<Count/ (* MOV CX,Count[BP]*)
$8B/$46/<Data/ (* MOV AX,Data[BP] *)
$FC/ (* CLD *)
$F3/$AB); (* REP STOSW *)
end;
See Also:
built-in assembler
Sandman25 (2004-10-04 18:03:00) [11][22] Суслик © (04.10.04 17:58)
Можно же вместо
x := Min(A,B);
...
y := Min(C,D);
сразу писать ассемблерный код по расчету минимума, то есть будет некий аналог inline. Но писать даже 2-3 строчки 20 раз утомительно и в корне неверно.
Суслик (2004-10-04 17:58:00) [12]
> [20] Sandman25 © (04.10.04 17:57)
> И так 20 раз :(
надо же знакомое слово прокомментировать :)))
Суслик (2004-10-04 17:57:00) [13]
> [19] Defunct © (04.10.04 17:53)
да не тот это inline :)
автор про другое спрашивал.
такого ни в паскале ни в дельфе не было
Sandman25 (2004-10-04 17:57:00) [14][19] Defunct © (04.10.04 17:53)
И так 20 раз :(
Defunct (2004-10-04 17:53:00) [15]> Аналога сишного inline в дельфи нет.
был в Паскале
В Delphi убрали за ненадобностью
Inline код можно разместить так:
asm
db <баты кода через пробел>
end;
Суслик (2004-10-04 17:49:00) [16]
> типа есть функции, которые должны работать медленно? :)
есть, где это не важно в разумных пределах.
таких функций большинство.
> можешь еще Magic Forum попробовать :)
у тебя он работает чере isa сервер с аутентификацией nmlt?
Piter (2004-10-04 17:32:00) [17]DelphiLexx © (04.10.04 15:37)
В С++ я часто встречаю использования Inline в функциях, которые должны
быстро работать
типа есть функции, которые должны работать медленно? :)
Суслик © (04.10.04 16:39) [16]
можешь еще Magic Forum попробовать :)
Суслик (2004-10-04 16:39:00) [18]
> Подредактируйте Answer.htm
спасибо :)))
Sandman25 (2004-10-04 16:30:00) [19][12] СУСЛИК © (04.10.04 16:01)
Подредактируйте Answer.htm
KSergey (2004-10-04 16:10:00) [20]> [13] }|{yk © (04.10.04 16:08)
> Да помнится проверял когда-то разницу в скорости между inline
> и не inline функциями, оказалось почти никакой.
Это от методики тестирования зависит. И от понимания что это есть ;)