mruby の内部的なページベースのメモリ管理方法について記述する
- mrb_state へのポインタと、 mrb_pool_page の先頭ノードへのポインタを持つ
struct mrb_pool {
mrb_state \*mrb;
struct mrb_pool_page \*pages;
};
- 各ページノードの要素と次のノードと末尾ノードの使用済み領域の終端へのポインタをもつ
struct mrb_pool_page {
struct mrb_pool_page \*next;
size_t offset;
size_t len;
void \*last;
char page[];
};
- mrb_pool を初期化する
- mrb_pool とそれに属するページのリソースを開放する
- mrb_pool に size_t サイズだけ空きのあるページを用意する
- もし既存のページに size_t 分の空きがあれば last を更新する
- もし既存のページに size_t 分の空きがなければ、新たに領域を確保する