Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Вниз

Для чего и как пользоваться оператором 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.039 c
6-1091792327
Nata
2004-08-06 15:38
2004.10.17
Служба


1-1096362766
Drobu
2004-09-28 13:12
2004.10.17
Как отключить Debugger?


14-1096250152
Думкин
2004-09-27 05:55
2004.10.17
С днем рождения! 27 сентября


3-1095068465
Medik
2004-09-13 13:41
2004.10.17
SQL Server2000


14-1096452458
__RusLAN
2004-09-29 14:07
2004.10.17
Админы помогите! Бесплатный прокси + Антивирус





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский