1

ARMプロシージャコール標準を読んでいます:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0041c/Cegbidie.html

それは言う:

フレームポインタレジスタを必要としないAPCSバリアントのみがサポートされます。フレームポインタレジスタを必要とするAPCSバリアントは廃止されました。これらのバリアントは、下位互換性のためにのみ文書化されています。

誰かが理由を教えてもらえますか?コンパイル時にスタックフレームサイズが不明な場合は、フレームポインタが必要だと思いました。

4

1 に答える 1

3

呼び出し規約が関数の終了時にスタックをクリーンアップする方法を指定していると仮定すると、必要なのはスタックポインターだけです。コンパイラーは関数内のすべてのスタック操作を追跡できるため、その情報を別のレジスターに保持する必要はありません。

確かに便利ですが、必ずしも必要というわけではありません。

于 2012-09-15T01:15:52.083 に答える