【发布时间】:2021-11-01 13:33:25
【问题描述】:
我在Rcpp 中实现了一个 MCMC 算法。我发现程序的内存随着运行的迭代次数越来越多,最终会被Linux系统杀死(即“内存不足”错误)。
我想监控每个变量的内存使用情况来检测问题的原因。
我知道在R 中,这可以使用object.size() 来完成。 Rcpp 对应的是什么?
我试过sizeof(),它似乎显示的是一个常数(例如,16)。我是否正确,一旦声明了一个变量(例如,mat mat1=zeros<mat>(10,10);),这个变量使用的内存大小在程序运行期间不会改变(例如,mat1(0,0)=100000; 不会改变mat1 的大小? )?
如果我的上述理解是正确的,那么“内存不足”的问题就更让我费解了,因为我在程序中并没有改变变量的大小。我确定了一个计算密集型函数,该函数在每次迭代期间由主 MCMC 函数调用,并且可能是“内存不足”问题的原因。那么我的问题是为什么调用相同的函数会导致越来越高的内存使用量?有没有可能这个函数使用的一些内存没有被释放?如果是这种情况,我应该如何确认?
感谢任何帮助或建议!
【问题讨论】:
-
公共仓库的链接会有所帮助。如果您评论对该函数的调用,您的记忆会增加吗?如果没有,那是你的功能吗?
-
嗨@IñakiÚcar,谢谢。这是一个私人项目,所以我无法分享回购。函数是我写的。该函数用于进行一堆计算并返回单个值(双精度型)。而且,如果我注释掉这个函数。 “内存不足”问题消失了。这个函数的一些输入变量非常大,所以我对这些变量使用“通过引用(&)”,否则计算时间要长得多。 “通过引用传递”是否可能导致此问题?我还没有测试。
-
R 具有不错的内存分析功能。请参阅编写 R 扩展,当 Rcpp 创建 R 对象时,这适用。
标签: c++ r memory rcpp rcpparmadillo