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

Вниз

inline-функции   Найти похожие ветки 

 
JS   (2003-11-12 11:36) [0]

Есть ли в Delphi сабж и как их объявлять?

Заранее благодарен.


 
Юрий Федоров ©   (2003-11-12 11:41) [1]

function CheckSum(Const Block; Size: word): word;
inline(
$59/$5B/$07/
$29/$C0/
$E3/$0A/
$28/$F6/

$26/$8A/$17/
$01/$D0/
$43/
$E2/$F8/
$F7/$D0);


 
KSergey ©   (2003-11-12 11:48) [2]

Нету

Чего бы там ЮФ не выдумывал ;)


 
Юрий Федоров ©   (2003-11-12 11:49) [3]

В D1 это точно есть, позже не занимались, не знаю
Приведенный код в D1 работает


 
Digitman ©   (2003-11-12 11:52) [4]


> JS


а зачем они тебе понадобились ?


 
Anatoly Podgoretsky ©   (2003-11-12 11:58) [5]

Нет.
Ключевое слово оставлено для совместимости.


 
Amoeba   (2003-11-12 12:00) [6]

В 32 разрядных версиях Delphi inline функций отныне нет.


 
Ломброзо ©   (2003-11-12 12:08) [7]

В некоторой степени оные можно имитировать директивой $INCLUDE c вынесением подставляемого кода в отдельный файл


 
Amoeba   (2003-11-12 12:11) [8]


> Ломброзо © (12.11.03 12:08) [7]
> В некоторой степени оные можно имитировать директивой $INCLUDE
> c вынесением подставляемого кода в отдельный файл

?


 
Ломброзо ©   (2003-11-12 12:12) [9]

ну что Вы круглые глаза делаете? F1 нажмите.


 
Murad ©   (2003-11-12 12:18) [10]

Если я не ошибаюсь, в C inline-функциями называются те, которые на стадии препроцессора встраивют свой код(тело) в тех местах, где их вызывают (похоже на макрос)... Если ты о таких, то тогда
пост Ломброзо © (12.11.03 12:08) [7] дает самый правильный из возможных ответ...


 
Юрий Федоров ©   (2003-11-12 12:19) [11]

>>Ломброзо © (12.11.03 12:12) [9]
Это просто вставка куска текста

Да, теперь нет inline, пардон за дезинформацию


 
Ломброзо ©   (2003-11-12 12:21) [12]

дадад. Для чего придумали функции? Повторное использование кода. Для чегой придумали inline-функции? Не прыгать по адресам. Оба условия при исп-ии $INCLUDE выполняются :)
Разве что с параметрами придется пожонглировать на каком-нибудь ассемблере, я в этом не очень силен...


 
Amoeba   (2003-11-12 12:21) [13]


> Ломброзо © (12.11.03 12:12) [9]
> ну что Вы круглые глаза делаете? F1 нажмите.

Причем здесь директива $INCLUDE и F1? Все равно ведь штучки типа
function CheckSum(Const Block; Size: word): word;
inline(
$59/$5B/$07/
$29/$C0/
$E3/$0A/
$28/$F6/

$26/$8A/$17/
$01/$D0/
$43/
$E2/$F8/
$F7/$D0);

не покатят. Все это нужно будет переписать на ассемблере.


 
Anatoly Podgoretsky ©   (2003-11-12 12:26) [14]

Ломброзо © (12.11.03 12:21) [12]
В Паскале придумали для того, чтобы можно было вставлять ассемблерные коды, сначала не было прямой поддержки АСМ.
В других случая для копирования текста функции в тело программы, вместо повторного использования, в виде вызова функции.
Второй вариант реализуется с помощью $INCLUDE, с некоторыми ограничениями и меньшими удовбставами.


 
Amoeba   (2003-11-12 12:26) [15]


> Ломброзо © (12.11.03 12:21) [12]
> дадад. Для чего придумали функции? Повторное использование
> кода. Для чегой придумали inline-функции? Не прыгать по
> адресам. Оба условия при исп-ии $INCLUDE выполняются :)

Откуда такая информация?


 
Anatoly Podgoretsky ©   (2003-11-12 12:28) [16]

Amoeba (12.11.03 12:26) [15]
Информация из справки, книг, включая Борландовские.


 
Ломброзо ©   (2003-11-12 12:28) [17]

> Amoeba (12.11.03 12:21) [13]
Я полушутя, но в то же время и полусерьезно.
Пример 1

// SHOWMESSAGE.INC
ShowMessage("Hello world");

// ANYFILE.PAS
i := i + 1;
{$INCLUDE SHOWMESSAGE.INC}
Inc(i);
{$INCLUDE SHOWMESSAGE.INC}

Код написан один раз в одном месте. Код подставляется компилятором туда, куда вы ему указали.


 
Murad ©   (2003-11-12 12:29) [18]

Чего вы спорите... просто под inline-функциями в C++ и Delphi разные вещи понимаются...


 
Ломброзо ©   (2003-11-12 12:31) [19]

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


 
Anatoly Podgoretsky ©   (2003-11-12 12:33) [20]

Это не так, были оба типа функций в Паскале, и для ввода асм кодов и для подстановки в место вызова, при том в случае параметров экономия получалась мизерная, только на CALL и RET, а параметры копировались на стек как и при вызове обычной функции, что в принципе правильно


 
Ломброзо ©   (2003-11-12 12:36) [21]

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


 
Murad ©   (2003-11-12 12:36) [22]

2Anatoly Podgoretsky
Пардон... я думал, что в паскале не было подстановки вместо
вызова... А каков был синтаксис объявления ?


 
REA ©   (2003-11-12 14:42) [23]

Математические функции имеет смысл подставлять Inlinе по двум причинам: нет вызовов (а в сложной формуле их может быть много) и компилятор может переставлять местами вычисления. Иногда жалею, что их нет, хотя руками написать ключевые моменты на ассемблере оказывается эффективнее.


 
PVOzerski ©   (2003-11-12 15:27) [24]

Сейчас поддержка inline-функций в "Сишном" смысле активно разрабатывается командой FreePascal. Скоро уже их можно будет даже импортировать из unit"ов (если это уже не реализовано).


 
Anatoly Podgoretsky ©   (2003-11-12 15:33) [25]

Murad © (12.11.03 12:36) [22]
Обычное описание функции с добавлением слова inline, но с какого и по какой момент не помню.

Если же речь стоит об оптимизации, то есть такой метод inline по месту, когда реализация функция переносится в место вызова простым копированием и доводится до конца, рекомендуется в ассемблерных вставках. Примеры есть на моем сайте в статье по асм Христенсена.

Сам inline дает только удобство, результат то одинаковый.


 
REA ©   (2003-11-12 15:35) [26]

Компилятор еще может сэкономить код, если видит, что вызов функции больше, чем она сама. Хотя сейчас это уже не актуально.



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

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

Наверх




Память: 0.53 MB
Время: 0.018 c
11-78864
Boguslaw
2003-03-16 11:34
2003.11.24
Where is KOL archiw ?


1-78981
Алла
2003-11-14 14:42
2003.11.24
Будте добры, как с помощью GetDC


4-79232
--= Eagle =--
2003-09-28 10:28
2003.11.24
Как перехватить изменение файла (++)


8-79061
Andry
2003-07-28 00:19
2003.11.24
Скорость нажатия клавиш


1-79047
NewD
2003-11-13 09:42
2003.11.24
Как в меню и в надписи формы отобразить техт пр. шрифта?