Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Для чего и как пользоваться оператором Inline


Страницы:   1 2

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 функциями, оказалось почти никакой.

Это от методики тестирования зависит. И от понимания что это есть ;)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо