| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > __fastcall |
| Автор: Dmi3ev 5.5.2009, 15:36 |
| __fastcall Порылся в гугле, но так и не понял, когда его применять? Если у меня функция без параметров, то совсем не надо? Я понял, что там завязка в том, что используются регистры для передачи параметров, а сколько их в Билдере я даже не знаю У меня функции мои без параметров совсем, подскажите, нужно ли вообще это дело??? И немного поясните, если можно, попроще... |
| Автор: Alexeis 5.5.2009, 15:40 |
| Можно использовать везде, кроме Dll, там желательно использовать stdcall. Разницы большой не будет, поскольку регистры то все равно нужны, поэтому в больших функциях параметры из регистров сбрасываются в стек, чтобы освободить необходимые для работы регистры. В маленьких функциях может дать прирост, хотя по правде говоря маленькие функции лучше инлайнить, чтобы совсем избавиться от вызова функции. |
| Автор: Dmi3ev 5.5.2009, 15:56 | ||||
те, если у меня функция допустим:
то ее лучше как inline объявить??? Так??? и никаких фастколов не нужно... |
| Автор: Alexeis 5.5.2009, 16:17 |
| Запросто. Работать будет быстрее. |
| Автор: Dmi3ev 5.5.2009, 16:19 |
| Я своим колхозным языком скажу так: 1) если функция маленькая, те несколько строк, ее лучше инлайнить 2) в остальных случаях писать фастколл, и не париться... комп сам сообразит, что да как... Правильно? |
| Автор: Dmi3ev 5.5.2009, 17:25 | ||||
про это сейчас речь не веду...
ок |
| Автор: artsb 5.5.2009, 22:32 |
На самом деле, если даже вы объявите функцию как inline это ещё не гарантирует того, что она будет inline. Здесь на усмотрение компилятора. Т.е. если он решит что её можно сделать inline, то он сделает, иначе, это будет обычная функция. |
| Автор: Kirgston 5.5.2009, 22:43 |
| А вообще полагаясь на мой учебник... фаст калл короче... при его применении компилятор старается занести переменные в регистры процессора и тем самым увеличить скорость выполнения |
| Автор: Alexeis 5.5.2009, 23:21 | ||
Я ж не отрицаю, что для маленьких функций это может работать. Попробуйте посмотреть асмовский код большой функции, все равно эти регистры сбрасывают в стек, так что прироста по сравнению с cdecl не добьетесь. |
| Автор: dumb 6.5.2009, 07:40 | ||
не будет. для начала, компилер это не заинлайнит. а вообще, советую глянуть код одного сравнения из выше-приведенных:
если уж оптимизировать(про корень зла слышали? Dmi3ev, даже когда у метода нет параметров, один неявный(this) таки передается. |
| Автор: Alexeis 6.5.2009, 09:14 |
| dumb, получается что функция в асм коде большая, кроме того в ней вызовы функций. Разумно. |
| Автор: Dmi3ev 6.5.2009, 10:59 | ||||
В смысле? Что именно глупость? Я просто создал свою функцию, которая че-то делает... Потом смотрю везде фастколлы стоят, начал рыть инфу, примерно понял, но решил спросить, что да как... Тут зашла речь про инлайн... А теперь я уж и не знаю, что мне писать и как
хм, это намек а то, что ставить фастколл нужно? ЗЫ dumb, загадками говоришь, а загадки связанные с программированием не мой конек... |
| Автор: dumb 6.5.2009, 12:11 |
| большая - слово весьма мягкое для такого функционала, но за все приходится платить: выше уровень(удобство) - жирнее код. причем далеко не единичного уровня "вложенности". ну ты как-то вырвал из контекста - глупостью я обозвал предложенную мной замену, ибо оптимизация в данном случае(builder,vcl,etc) нужна другого рода. впрочем, и пытаться экономить на соглашениях вызова/инлайнах - тоже занятие то еще... необходимости в этом нету, разве что для поддержания общего стиля, задаваемого борландом. ну или при экспорте/импорте нужно соблюдать(вроде уже упоминали здесь). ps: Dmi3ev, что это ты в последнее время так усердно начал открещиваться от программинга? - повышение получил что ли? |
| Автор: Dmi3ev 6.5.2009, 15:03 | ||||
Опять не догнал? Что значит открещиваться от программинга? ты про это?
|
| Автор: mes 6.5.2009, 15:24 | ||
Dmi3ev,
|