タグ

ブックマーク / ktaobo.blogspot.com (2)

  • mrubyのGCの仕組みを調べた - ブレ男のブログ

    2013年4月18日木曜日 mrubyのGCの仕組みを調べた 時刻: 0:09 動機 LuaのAPIは、Lua内部で扱われる値に関してスタック上であれこれ操作出来るだけで、値自体を直接取得したり作成することはできない。値を取り出したいときはスタック上のある場所にある値の型を調べて、その型の値を取り出すAPIを呼び出す、という具合になっている。この場合、処理系で扱う値はすべて処理系側で管理されているので、ガベージコレクト(GC)できるのもわからんでもない。 しかしmrubyAPIではスクリプト内部で扱う値をmrb_valueとしてC言語側に直接取り出せる。この場合処理系の管理を逃れてしまうことはないのか。またCの関数でmrubyのオブジェクトを作成した瞬間にGCが走った場合に、まだmrubyで管理している変数からの参照がなくて、解放されてしまったりしないのか。 大昔の事しか知らないけど

    gom68
    gom68 2013/05/06
  • ブレ男のブログ: mrubyでカスタムアロケータを指定

    2013年3月12日火曜日 mrubyでカスタムアロケータを指定 時刻: 17:10 mrubyで標準のmalloc/freeじゃなく、アプリ側で用意したメモリアロケータを指定してみる。mrubyの初期化をmrb_open()じゃなくてmrb_open_allocf()にして、引数にアロケータの関数とその関数に渡すユーザデータを与えて呼び出すことで、アプリ側でメモリ管理ができる。 アロケータは typedef void* (*mrb_allocf) (struct mrb_state *mrb, void*, size_t, void *ud); という型の関数で、サイズが0なら解放、0より大きい場合ポインタがNULLなら新規確保、NULLじゃなければ以前確保していた領域をリサイズした結果のポインタを返すことで、アプリ側で任意のメモリ管理ができる。デフォルトだと以下の様なアロケータになっ

    gom68
    gom68 2013/03/19
  • 1