加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 编程策略:如何使用指针或引用来提高速度或减少内存使用?

发布时间:2020-12-16 10:36:10 所属栏目:百科 来源:网络整理
导读:假设我有一个功能 double tauscale(NumericVector x){ int n = x.size(); const double k = 2; double sc = 1.48*sqrt(median(x*x)); double tauscale = 0.0; for(int i = 0 ; i n ; ++i){ tauscale = tauscale + rhobiweight(x(i)/sc,k); } return (1.0/n)*
假设我有一个功能

double tauscale(NumericVector x){
  int n = x.size();
  const double k = 2;
  double sc = 1.48*sqrt(median(x*x));
  double tauscale = 0.0;
  for(int i = 0 ; i < n ; ++i){
    tauscale = tauscale + rhobiweight(x(i)/sc,k);
  }
  return (1.0/n)*pow(sc,2)*tauscale;
}

现在我们在这里看到函数rhobiweight接受两个双精度,目前写为:

double rhobiweight(double x,double k = 2.0){
  double rho = 1.0;
  if(std::abs(x)<k){
    rho = 1.0-pow((1.0-pow(x/k,2)),3);
  }
  return rho/Erho(k) ;
}

问题是:如何使用指针或引用,以便不复制x值?理想情况下,计算时间和内存使用应该与我从未编写rhobiweight相同,但直接在tauscale中实现此功能.

解决方法

how can I make use of pointers or references such that the x-value doesn’t get copied?

通过将参数声明为指针或引用.但是不要这样做.然后你需要复制变量的地址,这同样慢,因为double的大小与内存地址的大小相同(或几乎相同).不仅如此,您还需要在函数中使用指针时取消引用指针.或者取消引用一次并复制该值.

Ideally the computation time and memory use should be the same as if I had never written rhobiweight,but implemented this function directly in tauscale.

如果函数由优化器内联展开,则会发生这种情况.没有标准的方法可以强制编译器扩展内联函数,但是如果优化器认为它是有利的,并且你已经启用了优化,那么只要该函数是无法使用的,它就会这样做.要使函数无法使用,请确保在调用站点上可以看到该定义.一个微不足道的方法是将内联函数声明.

请注意,如果内联许多函数调用,峰值内存使用实际上可能会更高.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读