私は32ビットの呼び出し規約の違いについて読んでいます。fastcall対stdcall試練です。
私が読んだところによると、2つの規則には大きな混乱があり、この混乱を避けるために64ビットが標準化されました。
私は尋ねなければなりません、なぜfastcall選ばれたのですか?
また、fastcallとstdcallはwin32用語であるため、引数を渡すためにレジスタを使用する、または使用しない関数呼び出しのUNIX用語は何ですか?
x86 Calling Conventions - ウィキペディア (フリー百科事典)にリストがあります。
x86-32 での一般的な呼び出し規約はcdecl. __attribute__((regparm(n)))GCC は、引数がレジスターによって渡されることを示す関数属性を提供しますnが、これは と同じではありませんfastcall。どちらの方法でも、引数は呼び出し先で破壊可能なレジスタに渡されるため、cdecl(for regparm) およびstdcall(for ) に関連する関数呼び出しに追加のコストはかかりません (また、引数用のスタック領域を追加してからクリーンアップする労力を節約できますfastcall)。
混乱を避けるために、Windows と Linux の x86-64 呼び出し規則は、x86-32 の呼び出し規則とは異なり、互いに異なります。どちらも ではありませんが、どちらもfastcallかなりの数のレジスタを使用して引数を渡します。