我有一个uBLAS矩阵,就像这样:
boost::numeric::ublas::matrix<double> mat(50000,50000);
在我对矩阵进行一系列计算后,我希望释放其内存。
我一直在使用 mat.clear()
, 根据文档,“清除矩阵”。但是我的程序不断耗尽内存。
深入分析头文件,我发现了以下内容:
void clear () {
std::fill (data ().begin (), data ().end (), value_type/*zero*/());
}
在clear()
中存在明显的语义问题。
那么问题来了,我该如何确保内存被释放?
std::vector
,调整大小并不会做出这样的保证,因为向量可能稍后再次扩大,而分配是昂贵的。相反,必须使用C++11的shrink_to_fit()
函数。我从未找到过这个问题的适当解决方案,最终转而使用了一个std::vector的std::vectors,因为我主要想要uBLAS作为一个方便的2d矩阵。 - Richard