![]() |
|
|
![]()
|
|
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
__fastcall
Порылся в гугле, но так и не понял, когда его применять? Если у меня функция без параметров, то совсем не надо? Я понял, что там завязка в том, что используются регистры для передачи параметров, а сколько их в Билдере я даже не знаю У меня функции мои без параметров совсем, подскажите, нужно ли вообще это дело??? И немного поясните, если можно, попроще... -------------------- |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Можно использовать везде, кроме Dll, там желательно использовать stdcall. Разницы большой не будет, поскольку регистры то все равно нужны, поэтому в больших функциях параметры из регистров сбрасываются в стек, чтобы освободить необходимые для работы регистры. В маленьких функциях может дать прирост, хотя по правде говоря маленькие функции лучше инлайнить, чтобы совсем избавиться от вызова функции.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Dmi3ev |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
те, если у меня функция допустим:
то ее лучше как inline объявить??? Так??? и никаких фастколов не нужно... -------------------- |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Запросто. Работать будет быстрее.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
Я своим колхозным языком скажу так:
1) если функция маленькая, те несколько строк, ее лучше инлайнить 2) в остальных случаях писать фастколл, и не париться... комп сам сообразит, что да как... Правильно? -------------------- |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Лучше сказать так, если функция выполняется за время сопоставимое со временем ее вызова, то лучше инлайнить.
Вообще, не всегда. Если используются плагины или проект сам является плагином или библиотекой (статической или динамической), то соглашение о вызове имеет значение. В С++ i386 принято использовать cdecl, WinApi stdcall, для COM там вроде safecall, для VCL fastcall. Лучше использовать то что принято, меньше шансов встреть лишние проблемы и вопросы. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Dmi3ev |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
про это сейчас речь не веду...
ок -------------------- |
||||
|
|||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
На самом деле, если даже вы объявите функцию как inline это ещё не гарантирует того, что она будет inline. Здесь на усмотрение компилятора. Т.е. если он решит что её можно сделать inline, то он сделает, иначе, это будет обычная функция. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: 2 Всего: 2 |
А вообще полагаясь на мой учебник... фаст калл короче... при его применении компилятор старается занести переменные в регистры процессора и тем самым увеличить скорость выполнения
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Я ж не отрицаю, что для маленьких функций это может работать. Попробуйте посмотреть асмовский код большой функции, все равно эти регистры сбрасывают в стек, так что прироста по сравнению с cdecl не добьетесь. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
не будет. для начала, компилер это не заинлайнит. а вообще, советую глянуть код одного сравнения из выше-приведенных:
если уж оптимизировать(про корень зла слышали? Dmi3ev, даже когда у метода нет параметров, один неявный(this) таки передается. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
dumb, получается что функция в асм коде большая, кроме того в ней вызовы функций. Разумно.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Dmi3ev |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
В смысле? Что именно глупость? Я просто создал свою функцию, которая че-то делает... Потом смотрю везде фастколлы стоят, начал рыть инфу, примерно понял, но решил спросить, что да как... Тут зашла речь про инлайн... А теперь я уж и не знаю, что мне писать и как
хм, это намек а то, что ставить фастколл нужно? ЗЫ dumb, загадками говоришь, а загадки связанные с программированием не мой конек... -------------------- |
||||
|
|||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
большая - слово весьма мягкое для такого функционала, но за все приходится платить: выше уровень(удобство) - жирнее код.
причем далеко не единичного уровня "вложенности". ну ты как-то вырвал из контекста - глупостью я обозвал предложенную мной замену, ибо оптимизация в данном случае(builder,vcl,etc) нужна другого рода. впрочем, и пытаться экономить на соглашениях вызова/инлайнах - тоже занятие то еще... необходимости в этом нету, разве что для поддержания общего стиля, задаваемого борландом. ну или при экспорте/импорте нужно соблюдать(вроде уже упоминали здесь). ps: Dmi3ev, что это ты в последнее время так усердно начал открещиваться от программинга? - повышение получил что ли? |
|||
|
||||
| Dmi3ev |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 16 Всего: 41 |
Опять не догнал? Что значит открещиваться от программинга? ты про это?
Это сообщение отредактировал(а) Dmi3ev - 6.5.2009, 15:04 -------------------- |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
||||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |