Форум: "Основная";
Текущий архив: 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.01 c