1

Ada がガベージ コレクションをサポートしているという話をいくつか聞いたことがあります。言語設計を見ると、明らかにそれを念頭に置いて設計されています。

ガベージ コレクションが非常に役立つ非リアルタイム アプリケーションがあります。ただし、私のコンパイラである GNAT で使用できるガベージ コレクタがあるという言及は見たことがありません。これには驚きました。C でさえ、単に libgc にリンクするだけでガベージ コレクションをサポートします。

libgc をリンカ行に単純に追加すると、動作しますか、それとも恐ろしいことが起こりますか?

4

2 に答える 2

0

ここで AdaCL ライブラリの一部として libgc バインディングを見つけました: http://adacl.sourceforge.net/

ただし、 libgc のドキュメントには、 libgc は system 経由で割り当てられたブロックに格納されているポインターを認識できないとも書かれていますmalloc()。これは、デフォルトのメモリ プールから割り当てられたオブジェクトにのみ格納されるアクセスはルートとは見なされず、いつでも無効になる可能性があることを意味します。これにより、標準の Ada コンテナを使用して収集可能なオブジェクトへのアクセスを保存する資格がなくなります! これは、セカンダリ スタックに当てはまる可能性があります --- しかし、セカンダリ スタックが何に使用されるかはわかりません。

ただし、私の調査では、ガベージ コレクションが単純に機能することが示されています。

while true loop
  p := new big_thing_t;
end loop;

...永遠に実行されます。おそらく理論的には可能ですが、現時点では安全ではないと思います。

于 2014-08-17T20:47:34.347 に答える