用于传递参数的 Rcpp 代理模型是否将对象复制到堆栈上?

Does Rcpp proxy model for passing parameters copy objects onto the stack?

假设我有以下简单函数

void test(NumericMatrix some_mat){

} 

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

void test(const NumericMatrix &some_mat){

} 

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

感谢任何建议。

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

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

不,抱歉,我无法在这里用几行来概括所有代码(或本书)。但是当我 google 术语 "Rcpp proxy object" 时,我得到了 51300 次点击。这也曾在这里讨论过,例如 this answer of mine from a year ago