Rcpp容器不释放内存

时间:2018-05-10 18:13:22

标签: rcpp

Rcpp容器在超出功能范围后似乎不释放内存:

# include <Rcpp.h>
using namespace Rcpp;


double f(int siz)
{
  IntegerVector a = Rcpp::sample(siz, siz);
  return std::accumulate(a.begin(), a.end(), 0.0);
}


// [[Rcpp::export]]
NumericVector test(int siz)
{
  NumericVector rst(siz);
  for(int i = 0; i < siz; ++i)
  {
    rst[i] = f(siz);
  }
  return rst;
}


/***R
rst = test(1000000)
*/

上述程序很快就会填满我的32GB内存。如何释放为Rcpp::IntegerVector中的f()分配的内存?

谢谢

注意:请改用IntegerVector a = Language("sample", siz, siz).eval()a的空格将立即从函数中释放出来。

注意2:通过阅读Rcpp的源代码,最佳解决方案是对自定义sample()进行编程。 Rcpp::sample()的核心组成部分是unif_rand()。将unif_rand()整合到Fisher-Yates Shuffle的现代版本中。问题解决了。

0 个答案:

没有答案