Что такое __fastcall, где он используется, зачем используется?

Что такое __fastcall, где он используется, зачем используется? Стоит ли его юзать везде? Исходя из названия, скорее всего, это нужно для быстроты?


Ответы (1 шт):

Автор решения: PRODIGY

Не смотря на зоопарк соглашений, на практике получили распространение всего три типа:

  1. stdcall - стандартный вызов API-функций Win, когда аргументы передаются через стек, и после того как функция отработает, она сама снимает со-стека аргументы. Используется в архитектуре Win x86-32.

  2. cdecl - декларация языка(С), аргументы так-же передаются через стек, но на выходе из функции мы сами должны очистить стек от аргументов (add esp,xx). Это потому, что функции cdecl могут иметь переменное число параметров и аргументов, и заранее неизвестно сколько им потребуется места в стеке. Яркий пример функция printf().

  3. fastcall - таким способом оформлены стандартные функции Win32API, только на системах х86-64. Здесь уже первые 4-аргумента передаются функциям через регистры RCX,RDX,R8,R9, а (если есть) 5-ый и остальные, как и прежде через стек. По этой причине вызов функций осуществляется быстрее. Очищает аргументы в стеке сама функция.

→ Ссылка