これは、「R拡張機能の記述」でかなり明確に説明されています。同じメモリプールにアクセスするcalloc()/のRバリアントを使用します。malloc()そうすれば、Rはgc()これらのことを実行でき、なぜ必要なのPROTECT()かUNPROTECT()。
6.1.2ユーザー制御のメモリ
メモリ割り当てのもう1つの形式は、へmallocのインターフェイスです。このインターフェイスは、Rエラー処理を提供します。このメモリは、ユーザーが解放するまで存続し、Rワークスペースに割り当てられたメモリに追加されます。
インターフェース機能は
TYPE* Calloc(size_t N, TYPE)
TYPE* Realloc(ANY *P, size_t N, TYPE)
void Free(ANY *P)
calloc、、reallocおよびの類似体を提供しfreeます。割り当て中にエラーが発生した場合はRによって処理されるため、これらのルーチンが返された場合、メモリは正常に割り当てまたは解放されています。 Free
ポインタPをに設定しますNULL。(Sのすべてのバージョンではありませんが、一部のバージョンがそうします。)
Freeユーザーは、エラーやユーザー割り込みなど、不要になったときにこのメモリを調整する必要があります。これは、多くの場合on.exit、呼び出し元のR関数のアクション
から最も便利に実行できpwilcoxます。例を参照してください。
Calloc/によって割り当てられたメモリReallocが、によって使用されるのと同じプールからのものであると想定しないでください。malloc特に、それを使用しない
freeでstrdupください。
これらのエントリポイントには、定義済みのR_if
をプレフィックスとして付ける必要があります。STRICT_R_HEADERS