2013-01-17 31 views
1

我正在爲R包開發一個函數,我需要在手動分配的內存中初始化R數值向量,而不是垃圾收集。如何將R對象放入手動分配的內存中?

標準函數allocVector(REALSXP,XXX)爲我分配內存並初始化對象。我已經分配了一塊內存,我需要在此內存中初始化R對象並將其返回給用戶空間。

算法我試圖按照

  1. 分配內存自己(其實這是一個內存映射文件)

  2. 把這個存儲A R對象(標準的R數字矢量)(如何? )

  3. 從試圖收集它(如何?)

  4. 註冊終結了

    防止垃圾收集器這個對象

  5. 返回[R對象的用戶可以使用它

  6. 獲取該對象不再被引用的通知,並解除分配對象

回答

4

你的問題,從1開始爲Writing R Extensions manual告訴你(以其神祕的方式,見Section 5.9.2)你必須使用R的內存「池」的對象,你交還給R.如果R不釋放對象的內存,如果它不控制訪問?

除非您使用外部指針,這些指針在相同的手冊和其他一些地方(其他問題,r-devel檔案,幾個軟件包......)也有所涉及。

而且將R包bigmemory幾乎涵蓋正是這一點(另見related bigmemory website,你可以,如果你願意,開始bigmemory並從中導出包「mmapmemory」哦,有一個包mmap但你可能已經知道了

+0

然後我需要在R垃圾收集器中進行破解我的包不必是便攜的 - 它將在專用的R實例和硬件上運行 – user1987021

+0

不需要便攜是相當這可能是一個非常糟糕的計劃,正如Dirk提到的,如果沒有一些奇特的黑客攻擊,你就無法做到你想要的東西,是否有可能,是的,有人會竭盡全力解釋它 - 可能不是,我問過,並坦率地希望我沒有看到它;-)爲了記錄,我是th也是R的mmap作者。祝你好運! –