これはあくまで実装の一例であって、詳細は言語処理系のデザインに任されています。 また、以降の例ではスタックは下方(アドレスの低い方)に伸びるものとします。 まず、C等の手続き型言語におけるスタックフレームの使い方を復習しておきましょう。 次のように、関数Aが関数Bと関数Cを呼び出しているものとします。 int A(int a, ...) { int b, c; B(b); C(c); } int B(int b) { int b1; /* other calculation */ } int C(int c) { int c1; /* other calculation */ } 関数Aが呼ばれた直後のスタックには、保存された呼び出し元のレジスタ、戻りアドレス、 そしてAの引数 (a等) とローカル変数 (b, c) 等が積まれます。スタックポインタ(SP)はスタックの再下端を指し、またフ