Rcpp代理模型是否将参数复制到堆栈中?

时间:2015-11-25 00:07:03

标签: r rcpp

假设我有以下简单的功能

void test(NumericMatrix some_mat){

} 

调用test时,Rcpp是否将整个some-mat对象实例复制到堆栈中?我想知道是否通过引用传递参数以防止复制堆栈上的对象更好。那么这是一个更好的方法吗?

void test(const NumericMatrix &some_mat){

} 

另外,我正在阅读Rcpp on github的源代码。我在哪里可以找到参数传递的代理模型的代码?

感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

NumericMatrixSEXP的代理对象,其中P代表指针。所以不,副本

您可以通过将10的向量或矩阵传递给函数的0,1,2,3,4,5 ......元素并测量代码的运行时间来轻松验证。如果是这些副本,时间会增加很多。我猜想,由于在主要部分处理更多数据,你最多只会看到小幅增加。

不,对不起,我不能在这几行总结所有代码(或书)。但是当我谷歌使用术语“Rcpp代理对象”时,我获得了51.3万次点击。这也在此处讨论过,请参阅例如this answer of mine from a year ago