这背后的原始动机是,我有一个动态大小的浮点数数组,我想通过Rcpp将它传递给R,而不会导致清零的成本,也不会导致深度复制的成本。
最初,我认为可能有某种方法可以获得堆分配的数组,使其为R的gc系统所知,然后将其与其他数据一起 Package 以创建一个“Rcpp::NumericVector”,但这似乎是不可能的--或者以我目前的知识是可行的。
然而,如果我错了,请纠正我,它看起来就像是简单地构造一个大小为N的NumericVector,然后将其用作一个大小为N的分配,将调用R. h的Rf_allocVector,而它本身也不会将分配的数组清零-我在一个小的C程序上测试了它,这个程序把dyn.加载到R中,它看起来像是垃圾值。我还看了一眼程序集,似乎没有任何归零出去
有谁能证实这一点或提供任何替代解决方案吗?
1条答案
按热度按时间ukqbszuj1#
你标记了这个
rcpp
,但它是R的C API中的一个函数--而Rcpp API为你提供了它的构造函数,这些构造函数实际上会将内存tp设置为零:字符串
这使用R的内存函数创建了一个动态分配的vector。该vector与R自己的vector无法区分。并且它的内存设置为零,因为我们使用
R_Calloc
,这在Writing R Extension中记录为将内存设置为零。(我们也可以显式使用memcpy()
,您可以检查源代码。)所以简而言之,你只是对R的C API和
Rcpp
提供了什么,以及什么是最容易使用的感到困惑。继续阅读文档,运行和编写示例,并研究现有的代码。一切都在那里!