3

タグ付きポインターは、動的言語を実装する際の一般的な最適化です。ポインターの下位 2 または 3 ビットが常にゼロになることを意味するアラインメント要件を利用し、それらを使用して型情報を格納します。

Boehm ガベージ コレクターを使用しているとします。これは基本的に、ポインターのように見えるもののアクティブ データを調べることによって機能します。タグ付きポインターは、下位​​ビットが非ゼロであるという意味で、ポインターのようには見えません。

Boehm を使用している場合、タグ付きポインタを破棄する必要がありますか? または、この問題を回避する方法はありますか?

4

1 に答える 1

3

私の知る限り、ベームは適切なオプションでこれを処理できます。低価格で、内部ポインターを検出できます。独自のスキャン コードを記述することもできます。基本的に、ほぼすべてを処理するのに十分なフックがおそらくあります。

私は独自のコレクターを作成しました。ヒープでは正確で、スタックでは保守的です。C製のポインタには触れません。一部のアプリケーションでは、言語に割り当てられたオブジェクトについて多くのことを知っており、従来の C++ デストラクタを使用して管理されている他のものを気にしないため、高速になります。

ただし、インクリメンタルでもジェネレーションでもなく、スレッドも処理しません (スレッドをシグナルで停止するほどスマートではありません)。ただし、プラス面としては、Boehm が行っているような魔法のリンケージ テクニック (malloc のキャプチャなど) は必要ありません。深刻なマイナス面として、管理対象オブジェクトを管理対象外オブジェクトに入れることはできません。

于 2011-01-17T13:33:34.790 に答える