Поделиться через


__fastcall

Только для систем Microsoft

__fastcall соглашение о вызовах указывает, что аргументы функций для передачи в регистрах, если это возможно.В следующем списке показана реализация этого соглашения о вызовах.

Элемент

Реализация

порядок Аргумент-проходить

Первое DWORD 2 или более мелкие аргументы передаются в регистре ECX и EDX; любые другие аргументы передаются довольно налево.

ответственность за Стек-обслуживания

Вызываемая функция извлекает аргументы из стека.

соглашение Имя-украшения

Знак @ присоединен префикс к именам; знак " @ ", за которым следует число байтов (в десятичном числе) в списке параметров suffixed с именами.

соглашение Обращение-перевода

Нет доступных преобразования регистра.

ПримечаниеПримечание

Будущие версии компилятора могут использовать различные регистры для хранения параметров.

Использование /Gr параметр компилятора вызывает каждую функцию в модуле компилировать как fastcall если функция не объявлена с конфликтующими атрибутом или имя функции main.

Для семейства процессоров Itanium (IPF) и AMD64) компьютеров __fastcall принимает и не обрабатывается компилятором. на обломоке IPF, по соглашению параметры передаются в регистр.

Для non-статических функций класса, если указанная функция вне линия, вызывающий модификатор соглашения не обязательно должен быть определен в определении вне линии.То есть для методов члена класса non-статических, соглашением о вызове, указанное во время объявления принято с точки зрения определения.Учитывая это определение класса

struct CMyClass {
   void __fastcall mymethod();
};

this

void CMyClass::mymethod() { return; }

аналогичен этому

void __fastcall CMyClass::mymethod() { return; }

Пример

В следующем примере создается функция с именем DeleteAggrWrapper передача аргументов в регистрах:

// Example of the __fastcall keyword
#define FASTCALL    __fastcall
   
void FASTCALL DeleteAggrWrapper(void* pWrapper);
// Example of the __ fastcall keyword on function pointer
typedef BOOL (__fastcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

См. также

Ссылки

Передача и соглашения об именовании аргумента

Ключевые слова C++