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

Вниз

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

 
DelphiLexx ©   (2004-10-04 15:37) [0]

В С++ я часто встречаю использования Inline в функциях, которые должны
быстро работать.
Вопрос: Как пользоваться данным оператором в Delphi. В help"e про него
очень мало инфы.


 
Семен Сорокин ©   (2004-10-04 15:44) [1]

{$I FileName}
FileName - имя файла.


 
KSergey ©   (2004-10-04 15:45) [2]

А разве в дельфи такой есть??? Или я пропустил что-то?


 
KSergey ©   (2004-10-04 15:46) [3]

To [1] Семен Сорокин ©   (04.10.04 15:44)

Inline это не #include ;)


 
Суслик ©   (2004-10-04 15:46) [4]


>  [1] Семен Сорокин ©   (04.10.04 15:44)

ты include и inline перепутал


 
Семен Сорокин ©   (2004-10-04 15:47) [5]

:)) уже понял


 
Anton_K ©   (2004-10-04 15:49) [6]

Inline нужен для вставки Ассемблерного кода.


 
суслик ©   (2004-10-04 15:49) [7]


>  В help"e про него
> очень мало инфы.

так мало, что ее просто нет :)))

ЗЫ. Может времена изменились, и это есть? :))))


 
Erik1 ©   (2004-10-04 15:51) [8]

Но можно с соблюдением определеных провил include как inline использовать.


 
Суслик ©   (2004-10-04 15:51) [9]

а-а-а.
понял про что это.
inline в сях и inline в дельфи - разные вещи

Аналога сишного inline в дельфи нет.


 
Семен Сорокин ©   (2004-10-04 15:54) [10]

offtop
2Суслик
а почему у тебя ник то с большой буквы, то с маленькой, это один из способов самовоспитания :)
зы. Без обид.


 
Sergey_Masloff   (2004-10-04 15:55) [11]

Суслик ©   (04.10.04 15:51) [9]
>Аналога сишного inline в дельфи нет.
а копипаст? Это ж просто вставка кода процедуры во все места где она должна вызываться? ;-)


 
СУСЛИК ©   (2004-10-04 16:01) [12]


>  [10] Семен Сорокин ©   (04.10.04 15:54)
> offtop

Все дело в том, что я в клиенте от nikkie не знаю как сделать так, чтобы ник каждый раз не набирать - вот и набираю каждый раз.


 
}|{yk ©   (2004-10-04 16:08) [13]

Да помнится проверял когда-то разницу в скорости между inline и не inline функциями, оказалось почти никакой. Компилятор сам решает, делать ли функцию inline, и кажется inline вообще собирались делать в стандарте "устаревшей"


 
KSergey ©   (2004-10-04 16:10) [14]

> [13] }|{yk ©   (04.10.04 16:08)
> Да помнится проверял когда-то разницу в скорости между inline
> и не inline функциями, оказалось почти никакой.

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


 
Sandman25 ©   (2004-10-04 16:30) [15]

[12] СУСЛИК ©   (04.10.04 16:01)

Подредактируйте Answer.htm


 
Суслик ©   (2004-10-04 16:39) [16]


> Подредактируйте Answer.htm

спасибо :)))


 
Piter ©   (2004-10-04 17:32) [17]

DelphiLexx ©   (04.10.04 15:37)
В С++ я часто встречаю использования Inline в функциях, которые должны
быстро работать


типа есть функции, которые должны работать медленно? :)

Суслик ©   (04.10.04 16:39) [16]

можешь еще Magic Forum попробовать :)


 
Суслик ©   (2004-10-04 17:49) [18]


> типа есть функции, которые должны работать медленно? :)

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


> можешь еще Magic Forum попробовать :)

у тебя он работает чере isa сервер с аутентификацией nmlt?


 
Defunct ©   (2004-10-04 17:53) [19]

> Аналога сишного inline в дельфи нет.
был в Паскале

В Delphi убрали за ненадобностью

Inline код можно разместить так:

asm
 db <баты кода через пробел>
end;


 
Sandman25 ©   (2004-10-04 17:57) [20]

[19] Defunct ©   (04.10.04 17:53)

И так 20 раз :(


 
Суслик ©   (2004-10-04 17:57) [21]


>  [19] Defunct ©   (04.10.04 17:53)

да не тот это inline :)
автор про другое спрашивал.
такого ни в паскале ни в дельфе не было


 
Суслик ©   (2004-10-04 17:58) [22]


>  [20] Sandman25 ©   (04.10.04 17:57)


> И так 20 раз :(

надо же знакомое слово прокомментировать :)))


 
Sandman25 ©   (2004-10-04 18:03) [23]

[22] Суслик ©   (04.10.04 17:58)

Можно же вместо
x := Min(A,B);
...
y := Min(C,D);
сразу писать ассемблерный код по расчету минимума, то есть будет некий аналог inline. Но писать даже 2-3 строчки 20 раз утомительно и в корне неверно.


 
Defunct ©   (2004-10-04 18:09) [24]

> да не тот это 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


 
Суслик ©   (2004-10-04 18:11) [25]


>  [24] Defunct ©   (04.10.04 18:09)

вот, когда я от тебя увижу описание inline из с++, тогда и будем сравнивать, то это о чем спрашивал автор или нет :))))


 
Defunct ©   (2004-10-04 18:24) [26]

Один из 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].


 
GuAV ©   (2004-10-04 19:51) [27]


> На скорость повлиять может только inline [24].

А eго можно заменить asm...end в котором DB :-)


 
Amoeba ©   (2004-10-05 11:49) [28]

А это из справки по 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.


 
Суслик ©   (2004-10-05 12:19) [29]


>  [28] Amoeba ©   (05.10.04 11:49)

и так двадцать раз подряд, пока не станет понятно, что к inline в паскале и дельфи вопрос отношения не имеет. :)))


 
KSergey ©   (2004-10-05 12:48) [30]

Так, друзья. Простите за тон, но
Давайте вначале все, кто не знает что значит inline в C++ таки узнает, а потом будет говорить про ассемблерные вставки и прочую глупость. Вернее - уже не будет ;)


 
Суслик ©   (2004-10-05 12:52) [31]

Маленькая лекция.

Inline в сях около функции инструктирует компилятор, что тело функции надо встраивать в каждое место вызова функции. Это позволяет избежать потерь времени на вызове функции. Компилятор не обязан делать встраивание, когда это не возможно (большие фукции, сложные функции, рекурсия и пр.), но старается учеть пожелания программиста.

Ничего подобного в дельфи нет.


 
Warlock ©   (2004-10-05 13:33) [32]

Суслик ©   (05.10.04 12:52) [31]

И слава богу. Да здравствует ООП!


 
Суслик ©   (2004-10-05 14:18) [33]


> И слава богу. Да здравствует ООП!

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

Могу привести пример того, когда это нужно.

У меня приятель работал в самом известном отеч. поисковом сервере. Движок у них был на ++. Сервак распределенный, 40 машин по $6000 каждая. Втала задача убрать две машины. По тестам этого делать было нельзя. 2 дня работы с установкой inline около некоторых функций позволили убрать целих 3 машины при сохранении производительности. 18 штук - неплохо, а?



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

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

Наверх




Память: 0.55 MB
Время: 0.067 c
1-1096548492
bs
2004-09-30 16:48
2004.10.17
Сохранение данных из поля memo в текстовый файл


3-1095318686
Мирон
2004-09-16 11:11
2004.10.17
TClientDataSet не обновляет базу при добавлении новой записи


9-1087222996
Uncle Archi
2004-06-14 18:23
2004.10.17
OpenGL


1-1096999542
BDenis
2004-10-05 22:05
2004.10.17
Каким образом лучше хранить разнотипные данные в одном файле?


8-1090082002
Ale}{(is)
2004-07-17 20:33
2004.10.17
мне привести 24-битное изображение к 8-битному...