Rf_allocVector只分配内存,不清零内存

h6my8fg2  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(109)

这背后的原始动机是,我有一个动态大小的浮点数数组,我想通过Rcpp将它传递给R,而不会导致清零的成本,也不会导致深度复制的成本。
最初,我认为可能有某种方法可以获得堆分配的数组,使其为R的gc系统所知,然后将其与其他数据一起 Package 以创建一个“Rcpp::NumericVector”,但这似乎是不可能的--或者以我目前的知识是可行的。
然而,如果我错了,请纠正我,它看起来就像是简单地构造一个大小为N的NumericVector,然后将其用作一个大小为N的分配,将调用R. h的Rf_allocVector,而它本身也不会将分配的数组清零-我在一个小的C程序上测试了它,这个程序把dyn.加载到R中,它看起来像是垃圾值。我还看了一眼程序集,似乎没有任何归零出去
有谁能证实这一点或提供任何替代解决方案吗?

ukqbszuj

ukqbszuj1#

你标记了这个rcpp,但它是R的C API中的一个函数--而Rcpp API为你提供了它的构造函数,这些构造函数实际上会将内存tp设置为零:

> Rcpp::cppFunction("NumericVector goodVec(int n) { return NumericVector(n); }")
> sum(goodVec(1e7))
[1] 0
>

字符串
这使用R的内存函数创建了一个动态分配的vector。该vector与R自己的vector无法区分。并且它的内存设置为零,因为我们使用R_Calloc,这在Writing R Extension中记录为将内存设置为零。(我们也可以显式使用memcpy(),您可以检查源代码。)
所以简而言之,你只是对R的C API和Rcpp提供了什么,以及什么是最容易使用的感到困惑。继续阅读文档,运行和编写示例,并研究现有的代码。一切都在那里!

相关问题