【问题标题】:uBLAS matrix clear memoryuBLAS矩阵清内存
【发布时间】: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++11 shrink_to_fit() 函数。我从来没有为这个问题找到合适的解决方案,最终转而使用 std::vector 的 std::vectors,因为我最希望 uBLAS 作为一个方便的二维矩阵。

标签: c++ memory-management boost matrix boost-ublas


【解决方案1】:

一种不优雅的返回内存的方法是调整矩阵的大小:

mat.resize(0,0,false);  

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    相关资源
    最近更新 更多