>>722
俺も外部の人間だから本当に適切な方法なんて知らないけど……

VALUE bufvalue;
size_t bufsize = 1024;
void *ptr = RB_ALLOCV(bufvalue, bufsize);

任意の処理を行う
ここで例外が発生しても次のGCで勝手に開放される
bufvalueはrubyの世界へと出さないように気をつける

/* メモリの即時開放(freeされる) */
RB_ALLOCV_END(bufvalue);



VALUE bufstr = rb_str_buf_new(bufsize);
void *ptr = RSTRING_PTR(bufstr);

任意の処理を行う
rubyの世界に出しても問題なし
ただし出したあとで再び使う場合は必ず
rb_str_modify(bufstr); /* freezeされたらaboneするけどな */
ptr = RSTRING_PTR(bufstr);
をやり直す

/* メモリの開放(即時開放されるかは実装任せ) */
rb_str_resize(bufstr, 0);


こんな感じかな