【问题标题】:How to put R objects in manually allocated memory?如何将 R 对象放入手动分配的内存中?
【发布时间】:2013-01-17 13:19:57
【问题描述】:

我正在用 C 语言为 R 包开发一个函数,我需要在手动分配的内存中初始化 R 数值向量,该内存不是垃圾回收的。

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

我正在尝试遵循的算法

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

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

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

  4. 为此对象注册终结器

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

  6. 获取不再引用对象的通知并释放对象

【问题讨论】:

    标签: r memory-management


    【解决方案1】:

    您的问题从 1 开始。正如 Writing R Extensions manual 告诉您(以神秘的方式,请参阅 Section 5.9.2)您必须将 R 的内存“池”用于您交还给的对象R. 如果不控制访问,R 还能如何释放对象的内存?

    除非您使用外部指针,在同一手册和其他一些地方(这里的其他问题,r-devel 档案,几个包,...)中也包含(某种程度上)。

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

    【讨论】:

    • 那么我需要去破解 R 垃圾收集器。我的包不必是可移植的——它将在专用的 R 实例和硬件上运行
    • 不需要便携很可能是一个非常糟糕的计划。正如 Dirk 所提到的,如果没有一些花哨的黑客攻击,你就无法做你想做的事。有没有可能,是的。有人会不遗余力地解释它 - 可能不会。我已经问过,被展示过,坦率地说希望我没有看到它;-) 为了记录,我也是 R 的 mmap 的作者。祝你好运!
    猜你喜欢
    • 2017-05-13
    • 1970-01-01
    • 2018-11-19
    • 2015-10-15
    • 2022-11-21
    • 2010-12-19
    • 1970-01-01
    • 2019-04-30
    • 2015-07-30
    相关资源
    最近更新 更多