FastCall в 64 бит
Я читал о различиях в 32-битных соглашениях о вызовах. fastcall
против stdcall
испытание это.
Из того, что я прочитал, была большая путаница с этими двумя соглашениями, и 64-разрядная версия была стандартизирована, чтобы избежать этой путаницы.
Я должен спросить, почему был fastcall
выбрали?
Кроме того, так как fastcall
а также stdcall
такое термины win32, что такое термин UNIX для вызова функции, который использует или не использует регистры для передачи аргументов?
1 ответ
x86 Calling Conventions - Wikipedia, бесплатная энциклопедия предоставляет список.
Общее соглашение о вызовах на x86-32 cdecl
, GCC предоставляет атрибут функции __attribute__((regparm(n)))
указать, что n
аргументы передаются регистром, но это не то же самое, что fastcall
, В любом случае, аргументы передаются в регистры с последующим вызовом, поэтому нет дополнительных затрат (и экономия усилий, связанных с добавлением стекового пространства для аргументов и последующей его очисткой) для вызовов функций, относящихся к cdecl
(за regparm
) а также stdcall
(за fastcall
).
Во избежание путаницы, соглашения о вызовах x86-64 в Windows и Linux отличаются как от x86-32, так и друг от друга. Ни то, ни другое fastcall
, хотя оба используют значительное количество регистров для передачи аргументов.