2016-09-30 9 views
0

プロシージャのランタイムセマンティクスをモデル化するには、一般にスタックが必要であることが知られています。 言語でプロシージャの再帰が許可されない場合は、スタックが必要ですか? 言語でプロシージャ再帰が許可されていても、プロシージャの最後で再帰呼び出しが発生する場合は、スタックが必要ですか?スタックを使用しないメモリ管理?

答えて

0

スタックは、メソッドの実行終了後に到達するためのリターンアドレスを格納するために使用されます。 スタックは、期間の範囲が限定されたオブジェクトを割り当てるためにも使用されます。

あなたのlaunguageが自動(Cスタイル)オブジェクトを許可しない(言い換えれば、ローカルスコープを許可しない)か、メソッドを許可しない場合、言語はスタック実装を完全に省略することができると思います。

私は再帰はスタックの要件とは関係がないと思います。

1

おそらく例として興味のあるFortranでは、再帰のためにスタックが必要です。再帰プロシージャのローカル変数を、プロシージャの各呼び出しごとに独立させたいからです。すべてが独立している必要はありませんが、一般的にはこの可能性があります。

再帰がないと、ローカル変数が静的になるように、いつでもプロシージャを1回呼び出すことができます。再帰ではそうではないので、データがどれだけ深くなるかわからないので、データを格納するための動的なデータ構造が必要です。必要に応じてスタック上のスタックをエミュレートできますが、動的メモリが必要です。

多くの場合、スタックは自動(可変長)配列にも使用されますが、必須ではありませんが、コンパイラとその設定に応じてヒープ上に置くことができます。