uBLAS矩阵清除内存

4

我有一个uBLAS矩阵,就像这样:

boost::numeric::ublas::matrix<double> mat(50000,50000);

在我对矩阵进行一系列计算后,我希望释放其内存。

我一直在使用 mat.clear(), 根据文档,“清除矩阵”。但是我的程序不断耗尽内存。

深入分析头文件,我发现了以下内容:

void clear () {
  std::fill (data ().begin (), data ().end (), value_type/*zero*/());
}

clear()中存在明显的语义问题。

那么问题来了,我该如何确保内存被释放?


你是否已经找到了解决问题的方法? - Thomas
你找到解决这个问题的方法了吗?我似乎遇到了同样的问题。一种不太优雅的处理方式是将矩阵调整为(0,0)大小。我想知道是否有更好的方法来解决它。 - Devil
@Devil,但是调整大小是否保证释放内存?例如,对于std::vector,调整大小并不会做出这样的保证,因为向量可能稍后再次扩大,而分配是昂贵的。相反,必须使用C++11的shrink_to_fit()函数。我从未找到过这个问题的适当解决方案,最终转而使用了一个std::vector的std::vectors,因为我主要想要uBLAS作为一个方便的2d矩阵。 - Richard
不幸的是,Ublas在语义上与STL使用的clear有所不同。查看代码,似乎resize(0, 0, false)会释放其内存。为了确保,可以将std::vector用作数组类型,并在resize(0, 0, false)之后调用shrink_to_fit()来释放data()的内存。 - undefined
1个回答

0

一个不太优雅的释放内存的方法是通过调整矩阵大小:

mat.resize(0,0,false);  

虽然我自己没有尝试过将零作为大小值使用...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接