これは、「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