タグ

ブックマーク / mirichi.hatenadiary.org (1)

  • RGenGCとC拡張ライブラリの関係 - mirichiの日記

    Ruby2.1のRGenGCについて対応などを考えていたので個人的まとめ。 ■世代別GCとC拡張ライブラリの相性の悪さ RGenGCは世代別GCである。通常はRubyシステムによって適切に制御されたライトバリアと世代別管理されたGCによって効率よく処理されるが、C拡張ライブラリが関わるとライトバリアの制御が適切に行われない。C拡張ライブラリを書き換えてライトバリアのコードを挿入すればいいわけだが、数が多かったりメンテナ不在だったりするわけで、この方法で対応するのは現実的ではない。 RubyにおいてC拡張ライブラリがライトバリアと相性悪い部分は以下の2点である。 ・CのコードはRubyオブジェクトの内部情報を取り出して保持できる。 ・C実装のクラスはRubyオブジェクト(VALUE型)を保持するC構造体を持つことができる。 たとえばRARRAY_PTRで配列のポインタを取り出して保持した場合

    RGenGCとC拡張ライブラリの関係 - mirichiの日記
  • 1