如何将R对象放入手动分配的内存中?

时间:2013-01-17 13:19:58

标签: r memory-management

我正在使用C for R package开发一个函数,我需要在非垃圾收集的手动分配内存中初始化R数字向量。

标准函数allocVector(REALSXP,XXX)为我分配内存并初始化对象。我已经分配了一块内存,我需要在这个内存中初始化R对象并将其返回给用户空间。

我想要遵循的算法

  1. 自己分配内存(实际上它是一个内存映射文件)

  2. 将R对象(标准R数值向量)放入此内存(如何?)

  3. 防止垃圾收集器尝试收集它(如何?)

  4. 为此对象注册终结器

  5. 返回R对象用户可以使用

  6. 获取不再引用对象的通知并取消分配对象

1 个答案:

答案 0 :(得分:4)

您的问题始于1.因为Writing R Extensions manual告诉您(以其神秘的方式,请参阅Section 5.9.2)您必须使用R的内存“池”来查找对象你回到R.如果不控制访问,R还能释放对象的内存吗?

除非你使用外部指针,这些指针也在同一本手册和其他一些地方(某些地方)(其他问题,r-devel档案,几个包,......)中也有所涉及。

R包bigmemory几乎涵盖了这一点(另请参阅related bigmemory website。如果您愿意,可以从bigmemory开始并从中获取包'mmapmemory'。哦,还有一个包mmap,但也许你已经知道了。