私は、CILバイトコードを事前にコンパイルするシステムを設計しています。比較的シンプルに保ち、移植性を高めるために、システムはマシンコードの代わりにCソースコードを出力します(ただし、OOPなどのすべての高レベルの構造は除外されます)。その意図は、ターゲットプラットフォーム用の標準Cコンパイラをそのコードで使用して、最終製品を取得することです。
最初は、stop-the-worldなどの非常に単純なGCアプローチを使用するつもりです。ただし、アプリケーションは優れたパフォーマンスを必要としませんが、まともなパフォーマンスが必要であるため、最終的にはGCを変更する必要があります。
最終的には、ある種の書き込みバリアを必要とする、より洗練されたGCを目指しています。私はSATBとカードマーキングのアプローチを見てきましたが、実際に良いGCを計画する準備はまだできていません。後で効率的なGC書き込みバリアがインラインアセンブリを必要とし、Cを発行する目的を大幅に無効にすることを発見するためだけに、Cソースコードを発行することで自分自身を撃ちたくありません。
それで、私の質問は、典型的な書き込みバリアをCコードで効率的に実装できるかということです。Cコンパイラにはまともなオプティマイザがあると想定できます。結果として得られる「ソースコード」が完全に判読できないこともすでにわかっているので、明確さは重要ではありません。
ソースファイルをさらに肥大化させることを犠牲にして、おそらく合理的に実行できると思いますが、GCの設計やコンパイラの内部に精通している人々からの言葉をいただければ幸いです。