Контейнеры Rcpp не освобождают память - PullRequest
0 голосов
/ 10 мая 2018

Контейнеры 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)
*/

Вышеуказанная программа скоро заполняет мою 32 ГБ памяти. Как освободить память, выделенную для Rcpp::IntegerVector в f()?

Спасибо

Примечание: используйте IntegerVector a = Language("sample", siz, siz).eval() вместо. Пространство для a будет немедленно выведено из функции.

Примечание2: при чтении исходного кода Rcpp лучшее решение - запрограммировать настроенный sample(). Центральным компонентом Rcpp::sample() является unif_rand(). Интегрируйте unif_rand() в современную версию Fisher – Yates Shuffle. Проблема решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...