GCで悩み中 heap の mark が遅い

自前 GC の実装中で悩み中。
以前作ったモノはあまりに遅かったので捨てて書き直したんだけど、やっぱり heap の mark が遅い。
前回の経験を踏まえて

  • 文字列など、ポインタを領域中に絶対含まない場合は alloc 時に指定し走査の対象とならない

という工夫を入れるも実用レベルにはもう一歩。


あと考えられる最適化は

  • 割り当て時に xx byte で align しておいて。それを元に対象かどうかを素早く判断。
  • 処理系にべったりな実装(GCがオブジェクト形式をしっている感じ)
  • 1byteずつ走査を 4byte 単位で走査していよい?

あたりかなぁ。


うーん。良い方法はないものか。Boehm GCのコードを読んでみるかなぁ。
汚いですがソースを晒しておきます。
http://www.monaos.org/downloads/gc20070311.tar.gz