回答:
GCは通常、ヒープに割り当てられたメモリに適用されます。私はForthやRPLに慣れていませんが、ヒープがなく、代わりにすべてがグローバルスタックに格納されている場合、GCが行うことはありません。
はい、あなたが正しい。しかし、スタックベースは、ストーリー全体の一部にすぎません。たとえば、Javaバイトコードインタープリターもスタックベースです(コンパイルされたコードは、効率上の理由で動作が異なります)。これにより、どの言語もスタック言語に変換できることがわかります。
重要なのは、スタックの外側にあるオブジェクト、つまり現在のメソッドの実行よりも長持ちするオブジェクトです。言語にmalloc
またはのようなものがない限り、そのようnew
なオブジェクトはなく、delete
GCも必要ありません。
動的メモリ割り当てのない言語は、その有用性がかなり制限されています。
言語がスタック割り当ての代わりに静的割り当てを使用する場合、ガベージコレクションは必要ありません。たとえば、Fortran 77で-s(静的ストレージ)オプションを使用すると、プログラムの起動時にすべてのメモリが割り当てられるため、実行時に解放されるメモリ割り当ては発生しません。ある程度の規律が必要ですが、プログラム、特に静的メモリ割り当てを使用するシミュレーションを作成することは可能です。コンパイラーは静的分析を使用してキャッシュにロードするものを決定できるため、静的割り当てはメモリリークを取り除き、素晴らしいキャッシュパフォーマンスをもたらします。