我正在使用C for R package开发一个函数,我需要在非垃圾收集的手动分配内存中初始化R数字向量。
标准函数allocVector(REALSXP,XXX)为我分配内存并初始化对象。我已经分配了一块内存,我需要在这个内存中初始化R对象并将其返回给用户空间。
我想要遵循的算法
自己分配内存(实际上它是一个内存映射文件)
将R对象(标准R数值向量)放入此内存(如何?)
防止垃圾收集器尝试收集它(如何?)
为此对象注册终结器
返回R对象用户可以使用
获取不再引用对象的通知并取消分配对象
答案 0 :(得分:4)
您的问题始于1.因为Writing R Extensions manual告诉您(以其神秘的方式,请参阅Section 5.9.2)您必须使用R的内存“池”来查找对象你回到R.如果不控制访问,R还能释放对象的内存吗?
除非你使用外部指针,这些指针也在同一本手册和其他一些地方(某些地方)(其他问题,r-devel档案,几个包,......)中也有所涉及。
R包bigmemory几乎涵盖了这一点(另请参阅related bigmemory website。如果您愿意,可以从bigmemory开始并从中获取包'mmapmemory'。哦,还有一个包mmap,但也许你已经知道了。