Что такое __fastcall, где он используется, зачем используется?
Что такое __fastcall, где он используется, зачем используется? Стоит ли его юзать везде? Исходя из названия, скорее всего, это нужно для быстроты?
Ответы (1 шт):
Не смотря на зоопарк соглашений, на практике получили распространение всего три типа:
stdcall- стандартный вызов API-функций Win, когда аргументы передаются через стек, и после того как функция отработает, она сама снимает со-стека аргументы. Используется в архитектуре Win x86-32.cdecl- декларация языка(С), аргументы так-же передаются через стек, но на выходе из функции мы сами должны очистить стек от аргументов (add esp,xx). Это потому, что функцииcdeclмогут иметь переменное число параметров и аргументов, и заранее неизвестно сколько им потребуется места в стеке. Яркий пример функцияprintf().fastcall- таким способом оформлены стандартные функции Win32API, только на системах х86-64. Здесь уже первые 4-аргумента передаются функциям через регистры RCX,RDX,R8,R9, а (если есть) 5-ый и остальные, как и прежде через стек. По этой причине вызов функций осуществляется быстрее. Очищает аргументы в стеке сама функция.