1

我正在为 R 包开发 C 中的函数,我需要在手动分配的内存中初始化 R 数字向量,而不是垃圾收集。

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

我正在尝试遵循的算法

  1. 自己分配内存(其实是内存映射文件)

  2. 在这个内存中放置一个 R 对象(标准 R 数值向量)(如何?)

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

  4. 为此对象注册终结器

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

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

4

1 回答 1

4

您的问题从 1 开始。正如《编写 R 扩展》手册告诉您的(以神秘的方式,请参阅第 5.9.2 节),您必须将 R 的内存“池”用于您交回给 R 的对象。R 还能如何释放对象的内存,如果它不控制访问?

除非您使用外部指针,在同一手册和其他一些地方(这里的其他问题,r-devel 档案,几个包,...)中也涵盖了(有点)。

R 包bigmemory几乎涵盖了这一点(另请参阅相关的 bigmemory 网站。如果您愿意,可以从 bigmemory 开始并从中派生一个包“mmapmemory”。哦,还有一个包mmap但是也许你已经知道了。

于 2013-01-17T14:06:43.903 回答