Rのガベージコレクション
Rのガベージコレクションはリファレンスカウント方式ではない。ということは,Cで拡張を書くとき,スタック上のRオブジェクトを開放しないためには,R自身にRオブジェクトを知らせる必要がある*1。
これを行うのがPROTECT(robj)というマクロで,Rオブジェクトを使い終わったらUNPROTECT(n)に登録したオブジェクトの個数を渡す。
PROTECT(ans = allocVector(VECSXP, n)); /* ... */ UNPROTECT(1);
PROTECT-UNPROTECT間でerror()などとするとまずいことが起きる気がする。