ボームとタグ付きポインター
-
09-10-2019 - |
質問
タグ付きポインターは、動的言語を実装する場合に一般的な最適化です。ポインターの2つまたは3ビットが常にゼロになることを意味するアライメント要件を利用して、それらを使用してタイプ情報を保存します。
Boehm Garbage Collectorを使用していると仮定します。これは、基本的にポインターのように見えるものについてアクティブなデータを調べることで機能します。タグ付きポインターは、低いビットがゼロではないという意味で、ポインターのようには見えません。
これはショートッパーですか?つまり、Boehmを使用している場合、タグ付きポインターを捨てる必要がありますか?それとも、この問題を回避する方法がありますか?
解決
Afaik Boehmは、適切なオプションでこれを処理できます。少額の価格で、インテリアポインターを検出することができます。独自のスキャンコードを作成することもできます。基本的に、おそらくほぼすべてを処理するのに十分なフックがあります。
私は自分のコレクターを書いています。それは山の上で正確で、スタックで保守的です。 Cに触れないポインターには触れません。一部のアプリケーションでは、私の言語が割り当てられたオブジェクトについて多くを知っており、たとえば従来のC ++デストラクタを使用して管理されている他のものを気にしないため、より速くなります。
ただし、それは増分や世代的ではなく、スレッドも処理しません(信号でスレッドを停止するほど賢くありません)。ただし、プラス面では、Boehmが行う魔法のリンケージテクニックを必要としません(Mallocなどをキャプチャするため)。深刻なマイナス側では、管理されていないオブジェクトに管理されていないオブジェクトに入れることはできません。