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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.009 c
3-78770
rFR
2003-11-05 01:56
2003.11.24
MS SQL7 ADO D7 unicode


6-79098
Wizard_1
2003-09-29 22:45
2003.11.24
FTP


3-78830
WondeRu
2003-11-06 08:37
2003.11.24
TQuery


14-79165
Ёжик
2003-10-19 21:58
2003.11.24
Как написать операционную систему?


3-78836
andrey__
2003-11-04 10:55
2003.11.24
компонент TClientDataSet





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский