Поиск:

Ответ в темуСоздание новой темы Создание опроса
> __fastcall 
:(
    Опции темы
Dmi3ev
Дата 5.5.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



__fastcall
Порылся в гугле, но так и не понял, когда его применять?
Если у меня функция без параметров, то совсем не надо?
Я понял, что там завязка в том, что используются регистры для передачи параметров, а сколько их в Билдере я даже не знаю  smile Остальное через стек передается... Замут какой-то такой, примерно  smile Я так понял...
У меня функции мои без параметров совсем, подскажите, нужно ли вообще это дело???
И немного поясните, если можно, попроще...



--------------------

PM MAIL   Вверх
Alexeis
Дата 5.5.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



  Можно использовать везде, кроме Dll, там желательно использовать stdcall. Разницы большой не будет, поскольку регистры то все равно нужны, поэтому в больших функциях параметры из регистров сбрасываются в стек, чтобы освободить необходимые для работы регистры. В маленьких функциях может дать прирост, хотя по правде говоря маленькие функции лучше инлайнить, чтобы совсем избавиться от вызова функции.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Dmi3ev
Дата 5.5.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

маленькие функции лучше инлайнить, чтобы совсем избавиться от вызова функции. 

те, если у меня функция допустим:
Код

bool TForm2::MyCheck1()
{
return(Edit1->Text!="" && Edit2->Text!=0 && Edit3->Text!="" && Edit4->Text!=0 &&
       Edit5->Text!="" && Edit6->Text!=0 && MaskEdit1->Text!="");
}

то ее лучше как inline объявить??? Так??? и никаких фастколов не нужно...


--------------------

PM MAIL   Вверх
Alexeis
Дата 5.5.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



  Запросто. Работать будет быстрее.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Dmi3ev
Дата 5.5.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Я своим колхозным языком скажу так:
1) если функция маленькая, те несколько строк, ее лучше инлайнить
2) в остальных случаях писать фастколл, и не париться... комп сам сообразит, что да как...
Правильно?  smile 


--------------------

PM MAIL   Вверх
Alexeis
Дата 5.5.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(Dmi3ev @  5.5.2009,  15:19 Найти цитируемый пост)
1) если функция маленькая, те несколько строк, ее лучше инлайнить

  Лучше сказать так, если функция выполняется за время сопоставимое со временем ее вызова, то лучше инлайнить.

Цитата(Dmi3ev @  5.5.2009,  15:19 Найти цитируемый пост)
2) в остальных случаях писать фастколл, и не париться... комп сам сообразит, что да как...

  Вообще, не всегда. Если используются плагины или проект сам является плагином или библиотекой (статической или динамической), то соглашение о вызове имеет значение. В С++ i386 принято использовать cdecl, WinApi stdcall, для COM там вроде safecall, для VCL fastcall. Лучше использовать то что принято, меньше шансов встреть лишние проблемы и вопросы.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Dmi3ev
Дата 5.5.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

сам является плагином или библиотекой (статической или динамической)

про это сейчас речь не веду...
Цитата

Лучше сказать так, если функция выполняется за время сопоставимое со временем ее вызова, то лучше инлайнить.

ок



--------------------

PM MAIL   Вверх
artsb
Дата 5.5.2009, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(Dmi3ev @  5.5.2009,  16:19 Найти цитируемый пост)
1) если функция маленькая, те несколько строк, ее лучше инлайнить

На самом деле, если даже вы объявите функцию как inline это ещё не гарантирует того, что она будет inline. Здесь на усмотрение компилятора. Т.е. если он решит что её можно сделать inline, то он сделает, иначе, это будет обычная функция.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Kirgston
Дата 5.5.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: 2
Всего: 2



А вообще полагаясь на мой учебник... фаст калл короче... при его применении компилятор старается занести переменные в регистры процессора и тем самым увеличить скорость выполнения
PM MAIL   Вверх
Alexeis
Дата 5.5.2009, 23:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(Kirgston @  5.5.2009,  21:43 Найти цитируемый пост)
фаст калл короче... при его применении компилятор старается занести переменные в регистры процессора и тем самым увеличить скорость выполнения 

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
dumb
Дата 6.5.2009, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Цитата(Alexeis @  5.5.2009,  16:17 Найти цитируемый пост)
Запросто. Работать будет быстрее. 
не будет. для начала, компилер это не заинлайнит. а вообще, советую глянуть код одного сравнения из выше-приведенных:
Код

Unit1.cpp.35: bool rt = Edit1->Text!="";
00401A40 66C745D81400     mov word ptr [ebp-0x28],0x0014
00401A46 8D45FC           lea eax,[ebp-0x04]
00401A49 E8AAFFFFFF       call System::AnsiString::AnsiString()
00401A4E 8BD0             mov edx,eax
00401A50 FF45E4           inc dword ptr [ebp-0x1c]
00401A53 8B4DC4           mov ecx,[ebp-0x3c]
00401A56 8B81F4020000     mov eax,[ecx+0x000002f4]
00401A5C E813AD0200       call Controls::TControl::GetText(Controls::TControl * const )
00401A61 8D55FC           lea edx,[ebp-0x04]
00401A64 52               push edx
00401A65 BA88914600       mov edx,0x00469188
00401A6A 8D45F8           lea eax,[ebp-0x08]
00401A6D E85A5F0600       call System::AnsiString::AnsiString(System::AnsiString * const ,const char *)
00401A72 FF45E4           inc dword ptr [ebp-0x1c]
00401A75 8D55F8           lea edx,[ebp-0x08]
00401A78 58               pop eax
00401A79 E84A600600       call System::AnsiString::operator !=()
00401A7E 8845C3           mov [ebp-0x3d],al
00401A81 FF4DE4           dec dword ptr [ebp-0x1c]
00401A84 8D45F8           lea eax,[ebp-0x08]
00401A87 BA02000000       mov edx,0x00000002
00401A8C E8F35F0600       call System::AnsiString::~AnsiString(System::AnsiString * const ,int)
00401A91 FF4DE4           dec dword ptr [ebp-0x1c]
00401A94 8D45FC           lea eax,[ebp-0x04]
00401A97 BA02000000       mov edx,0x00000002
00401A9C E8E35F0600       call System::AnsiString::~AnsiString(System::AnsiString * const ,int)
00401AA1 66C745D80800     mov word ptr [ebp-0x28],0x0008


если уж оптимизировать(про корень зла слышали? smile), то сравнения EditX->Text!="" лучше заменить на EditX->GetTextLen(). а вообще, глупости это все.

Dmi3ev, даже когда у метода нет параметров, один неявный(this) таки передается.

PM MAIL   Вверх
Alexeis
Дата 6.5.2009, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



dumb, получается что функция в асм коде большая, кроме того в ней вызовы функций. Разумно.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Dmi3ev
Дата 6.5.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

а вообще, глупости это все.

В смысле? Что именно глупость?
Я просто создал свою функцию, которая че-то делает... 
Потом смотрю везде фастколлы стоят, начал рыть инфу, примерно понял, но решил спросить, что да как... 
Тут зашла речь про инлайн...
А теперь я уж и не знаю, что мне писать и как  smile 
Цитата

Dmi3ev, даже когда у метода нет параметров, один неявный(this) таки передается.

хм, это намек а то, что ставить фастколл нужно?
ЗЫ
dumb, загадками говоришь, а загадки связанные с программированием не мой конек...  smile 


--------------------

PM MAIL   Вверх
dumb
Дата 6.5.2009, 12:11 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Цитата(Alexeis @  6.5.2009,  09:14 Найти цитируемый пост)
получается что функция в асм коде большая
большая - слово весьма мягкое для такого функционала, но за все приходится платить: выше уровень(удобство) - жирнее код.
Цитата(Alexeis @  6.5.2009,  09:14 Найти цитируемый пост)
кроме того в ней вызовы функций
причем далеко не единичного уровня "вложенности".

Цитата(Dmi3ev @  6.5.2009,  10:59 Найти цитируемый пост)
В смысле? Что именно глупость?
ну ты как-то вырвал из контекста - глупостью я обозвал предложенную мной замену, ибо оптимизация в данном случае(builder,vcl,etc) нужна другого рода. впрочем, и пытаться экономить на соглашениях вызова/инлайнах - тоже занятие то еще...

Цитата(Dmi3ev @  6.5.2009,  10:59 Найти цитируемый пост)
хм, это намек а то, что ставить фастколл нужно?
необходимости в этом нету, разве что для поддержания общего стиля, задаваемого борландом. ну или при экспорте/импорте нужно соблюдать(вроде уже упоминали здесь).

ps: Dmi3ev, что это ты в последнее время так усердно начал открещиваться от программинга? - повышение получил что ли? smile
PM MAIL   Вверх
Dmi3ev
Дата 6.5.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

Dmi3ev, что это ты в последнее время так усердно начал открещиваться от программинга? - повышение получил что ли? 

Опять не догнал? Что значит открещиваться от программинга?

ты про это?
Цитата

ЗЫ
dumb, загадками говоришь, а загадки связанные с программированием не мой конек...


Это сообщение отредактировал(а) Dmi3ev - 6.5.2009, 15:04


--------------------

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.