【发布时间】:2020-10-20 19:16:55
【问题描述】:
在我的部分代码中,我需要优化 Rcpp 中的一个函数(我在这里遵循了第二个答案 Applying the optim function in R in C++ with Rcpp)。但是,我发现该函数会泄漏内存(很少,但如果它是重复运行模拟的一部分,它会复杂化)。我创建了一个最小的可重现示例,但我不知道泄漏的来源/如何处理它。我可以寻求有关处理此问题的指导吗?
Rcpp 代码:
#include <Rcpp.h>
using namespace Rcpp;
double objective_function(double x){
double obj = .666 - x;
return pow(obj, 2);
}
// [[Rcpp::export(leak)]]
double leak(double a, double b){
// Extract R's optim function
Rcpp::Environment stats("package:stats");
Rcpp::Function optim = stats["optim"];
// Call the optim function from R in C++
Rcpp::List opt_results = optim(Rcpp::_["par"] = .5,
Rcpp::_["fn"] = Rcpp::InternalFunction(&objective_function),
Rcpp::_["method"] = "Brent",
Rcpp::_["lower"] = a,
Rcpp::_["upper"] = b);
// Extract out the estimated parameter values
double mu = opt_results[0];
// Return estimated values
return mu;
}
R 代码:
repeat{
leak(0, 1)
}
当我查看我的任务管理器时,Rstudio R Session 下的 RAM 使用量正在稳步增加(如果我使用任何其他只返回值的函数,则不会发生这种情况)。
【问题讨论】:
-
如果你像往常一样直接在 R 中调用
optim,是否也会发生泄漏? -
这是一个很好的问题@HongOoi。我只是尝试直接从 R 优化 Rcpp 定义的函数,并且不会发生泄漏。如果我从 Rcpp 泄漏函数中对其进行优化,就会发生这种情况。
标签: rcpp