用于传递参数的 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 NumericMatrix
是 SEXP
的代理对象,其中 P 代表指针。所以不,副本是而不是。
您可以通过将向量或矩阵的 10 的 0、1、2、3、4、5 的次方传递给函数并测量 运行 的时间来轻松验证代码。如果是这些副本,时间会增加很多。我猜想由于在主要部分中使用了更多数据,您最多只能看到小幅增长。
不,抱歉,我无法在这里用几行来概括所有代码(或本书)。但是当我 google 术语 "Rcpp proxy object" 时,我得到了 51300 次点击。这也曾在这里讨论过,例如 this answer of mine from a year ago。
假设我有以下简单函数
void test(NumericMatrix some_mat){
}
当调用测试时,Rcpp 是否将整个 some-mat
对象实例复制到堆栈上?我想知道通过引用传递参数是否更好,以防止复制堆栈上的对象。那么这是更好的方法吗?
void test(const NumericMatrix &some_mat){
}
此外,我正在阅读 Rcpp on github 的源代码。哪里可以找到传参代理模型的代码?
感谢任何建议。
A NumericMatrix
是 SEXP
的代理对象,其中 P 代表指针。所以不,副本是而不是。
您可以通过将向量或矩阵的 10 的 0、1、2、3、4、5 的次方传递给函数并测量 运行 的时间来轻松验证代码。如果是这些副本,时间会增加很多。我猜想由于在主要部分中使用了更多数据,您最多只能看到小幅增长。
不,抱歉,我无法在这里用几行来概括所有代码(或本书)。但是当我 google 术语 "Rcpp proxy object" 时,我得到了 51300 次点击。这也曾在这里讨论过,例如 this answer of mine from a year ago。