【发布时间】:2013-05-18 16:26:22
【问题描述】:
我有一个 uBLAS 矩阵,如下所示:
boost::numeric::ublas::matrix<double> mat(50000,50000);
一旦我完成了对矩阵的一组计算,我希望释放它的内存。
我一直在使用mat.clear(),根据docs,它“清除矩阵”。但是我的程序总是内存不足。
深入研究标题,我发现:
void clear () {
std::fill (data ().begin (), data ().end (), value_type/*zero*/());
}
所以clear() 存在明显的语义问题。
那么问题来了,如何确保内存被释放?
【问题讨论】:
-
你有没有找到解决问题的办法?
-
您找到解决此问题的方法了吗?我似乎遇到了同样的问题。处理该问题的一种不优雅的方法是将矩阵的大小调整为 (0,0)。我想知道是否有一种“正确”的方式来做到这一点。
-
@Devil,但是调整大小可以保证释放内存吗?例如,对于
std::vector,调整大小并不能保证这样,因为向量可能会在以后再次放大并且分配很昂贵。相反,必须使用 C++11shrink_to_fit()函数。我从来没有为这个问题找到合适的解决方案,最终转而使用 std::vector 的 std::vectors,因为我最希望 uBLAS 作为一个方便的二维矩阵。
标签: c++ memory-management boost matrix boost-ublas