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, хотя оба используют значительное количество регистров для передачи аргументов.

Другие вопросы по тегам