スタックベースの言語でガベージコレクションが必要ですか?


16

スタックベースの言語でのガベージコレクション(GC)の必要性は何ですか?ForthRPLHP計算機)のような言語では、ガベージコレクションが必要ですか?

出力はスタックからポップされるので、必要はないと思います。何か不足していますか?

回答:


14

GCは通常、ヒープに割り当てられたメモリに適用されます。私はForthやRPLに慣れていませんが、ヒープがなく、代わりにすべてがグローバルスタックに格納されている場合、GCが行うことはありません。


2
私が初期に読んだForthプログラムの典型的なメモリ使用パターンは、事前に設定された静的なグローバルデータアドレスを使用するという点で、アセンブリプログラムのようなものでした。Forthには、スタックと特定のアドレス間でデータを転送する機能があるため、これが機能します。さらに、アドレスを計算する機能があります。したがって、ヒープの概念に基づいてアロケータライブラリを作成することが可能であり、アロケータライブラリはヒープの有限サイズを処理する何らかの方法を必要とします。Forthのユーザーがこの道を進んだ場合、GCを望んで実装できます。
カーディフスペースマン

13

はい、あなたが正しい。しかし、スタックベースは、ストーリー全体の一部にすぎません。たとえば、Javaバイトコードインタープリターもスタックベースです(コンパイルされたコードは、効率上の理由で動作が異なります)。これにより、どの言語もスタック言語に変換できることがわかります。

重要なのは、スタックの外側にあるオブジェクト、つまり現在のメソッドの実行よりも長持ちするオブジェクトです。言語にmallocまたはのようなものがない限り、そのようnewなオブジェクトはなく、deleteGCも必要ありません。

動的メモリ割り当てのない言語は、その有用性がかなり制限されています。


最後の行に同意するかどうかわからない、javaバイトコードは役に立ちませんか?
jk。

@ jk。、javaバイトコードには動的メモリ割り当てがあります。
ピーターテイラー

1
実際には、スタックベースの汎用言語がいくつかあります。見ていfactorcode.orgを
ヤムMarcovic

1
実際の要因はガベージコレクションです
アンドレア

1

言語が本質的に動的データ構造をサポートする場合、ガベージコレクションが必要です。Cのレベルを超えて何かをしたい場合、これはほとんど必要です。それなしでは、固定サイズのデータ​​構造とメモリの管理だけで行き詰まってしまいます。もちろん、これは元のForthが行うことですが、低レベルのシステムコーディングのみを行っているのでない限り、おそらく今日はやりたいことではないでしょう。


1

言語がスタック割り当ての代わりに静的割り当てを使用する場合、ガベージコレクションは必要ありません。たとえば、Fortran 77で-s(静的ストレージ)オプションを使用すると、プログラムの起動時にすべてのメモリが割り当てられるため、実行時に解放されるメモリ割り当ては発生しません。ある程度の規律が必要ですが、プログラム、特に静的メモリ割り当てを使用するシミュレーションを作成することは可能です。コンパイラーは静的分析を使用してキャッシュにロードするものを決定できるため、静的割り当てはメモリリークを取り除き、素晴らしいキャッシュパフォーマンスをもたらします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.