Skip to content
2008/10/28 / highmt

GCを書いてみる(1)

あるコードを書いていて Boehm GC を使おうかどうか考えていたのだけれども、
どうやら、C++でデストラクタを呼ぶためには、
仮想デストラクタを持つ専用の基底クラスを継承しないといけないらしいことが判明。
GCがデストラクタを呼ぶためには、破棄対象のオブジェクトの型を実行時に知る必要があるので、
当然といえば当然の仕様だけれども。
ソースを変更できないようなクラスを扱う場合も、そういうのはGCの外に置いて、
そのポインタをGC管理対象のスマートポインタでラップするとかすれば対応できそうだし。
そうこう考えながら、「どうせラップするんならGC管理部分はアロケータの外に置いてしまえ」
と思い立ち、GCのほうを作ってみた。

(もしまだ誰も考えてなければ)寄生的GCと呼ぶことにする。

そんなこんなで、結局まだ Boehm GC を試してないので、あとでちゃんと調べておこう。

後で書く予定:
  – 寄生的の概念
    – アロケータを持たないこと
    – メリット:
      – 最適化されたアロケータを利用できる
      – C++の既存の枠組みを壊さない
        – ライブラリとの相性がよい
          – STLと衝突しない
    – デメリット:
      – 間接化による空間コスト
      – 間接化による時間コスト
  – 実装の概略
  – CのためのAPI
  – C++での利用
    – スマートポインタによるラップ
      – 標準スマートポインタ
        – 単純
        – 配列
      – カスタム参照
        – 弱参照
        – ソフト参照
        – カスタムスマートポインタ
          – STLコンテナ
    – スマートポインタコピーの安全性
  – 問題
    – 保守的
      – 参照はずしの原子性
        – オブジェクトの移動
        – 弱参照の実装
        – 対策:
          – シングルスレッド
          – GC禁止セクション
    – 回収の順序
      – 対策:
        – 触らない
        – スイープ順序による制御
    – 最適化への対処
  – パフォーマンス
  – 今後
    – 未実装部分
      – グローバル変数保護
      – STLコンテナ用スマートポインタ
    – 管理テーブルの効率化
    – 遅延スイープ
    – マルチスレッド対応

——–
2009/01/12 カテゴリ変更

広告
%d人のブロガーが「いいね」をつけました。