Rubyのオブジェクトについて

前回は院試終わって,疲れきった中での更新でした.しかも夜中の更新でした. 文章読んでも,何書いてあるかわからなかった.

とりあえず,今回の題材はrb_object

なぜコレをピックアップするかというと,gc.cのオブジェクトを辿って行くとコレに着く(たしか). 以下に構造体の中身をなくした状態のオブジェクトの構造体を載せる. ホントは絵とか書いて,説明したいけどスキャンして貼り付けまではしたくないため割愛.

あたりまえの話だけど,オープンソースのコードは共同で開発しているので,大体わかりやすい名前付けになっている. Rubyとかだと担当場所が決められてるらしいんで,他のコミッタが読めない名前が付けられてるときもあるらしい.

typedef struct rb_objspace {
    struct {
        ・・・
    } malloc_params;

    struct {
        ・・・
    } flags;

    rb_event_flag_t hook_events;
    size_t total_allocated_objects;

    rb_heap_t eden_heap;
    rb_heap_t tomb_heap; /* heap for zombies and ghosts */

    struct {
    rb_atomic_t finalizing;
    } atomic_flags;

    struct mark_func_data_struct {
        ・・・
    } *mark_func_data;

    mark_stack_t mark_stack;
    size_t marked_slots;

    struct {
        ・・・
    } heap_pages;

    st_table *finalizer_table;

    struct {
        ・・・
    } profile;
    struct gc_list *global_list;

    VALUE gc_stress_mode;

#if USE_RGENGC
    struct {
        ・・・
    } rgengc;
#if GC_ENABLE_INCREMENTAL_MARK
    struct {
        ・・・
    } rincgc;
#endif
#endif /* USE_RGENGC */
} rb_objspace_t;

で実際,みると名前だけでも大体わかる. 下にまとめる.

  • malloc_params: Rubyオブジェクトのためのmalloc()の設定
  • flags:GCの実施,マイナーGCを実施するか等をフラグにて表現(コロン以下はビット数)
  • eden_heap: rgengcのナーサリ領域(もしかしたら違うかも)
  • tomp_heap: rgengcのマチュア領域(もしかしたら違うかも)
  • heap_pages: オブジェクトを割り付けるところ(ヒープ)
  • profile :プロファイルしたいときに使うパラメータ群
  • rgengc: RgenGCの設定 世代別GC
  • rincgc: incrementalつまり,リアルタイム性を重視したGC

といった形で読める.

mark_func_dataとかよくわからない言葉もちらほら…,わからないものに関しては出てきたらなんとかしようと思います.

なんかダレてしまっている気がするため,今度はkobitoとかにmちゃんと書き写したやつをコピペするようにシます