私が知る限り、x64
コードには2つの呼び出し規約があります - Microsoft x64
とAMD64
です。GCC x64関数呼び出し
gcc
は-mregparm=0
パラメータで起動できますが、これはAMD64
呼び出し規約を使用している場合には機能しません。 これは、最初の6つの変数のレジスタの使用を、AMD64
の規約で義務づけているためです(なぜこれが行われたのかは分かりませんが、セキュリティ上の問題がスタックになる可能性があるためです)。 gcc
Microsoft x64
下の規則を使用してコンパイルするとき
この(強制レジスタの使用)のようないくつかの厳格なルールがあります:
だから、ここでの質問はありますか?そして、はいの場合、どのようにしてABI
の互換性を破ることなくバイパスできますか?
*好奇心旺盛です。私は 'x64'プラットフォームの最適化研究を行ってきましたが、呼び出し規約との誤解を解決したいと思っていました。 –