NTL数论库中矩阵的空闲内存

问题描述

大家! 我在 SGX 飞地内使用 NTL。当我运行应用程序时,我遇到了关于 out of memory 的问题。然后查了一下内存,估计是NTL矩阵使用量大的缘故。

矩阵在NTL中的基本使用:

Mat<size_t> mtemp;
mtemp.SetDims(num_row,num_col);

NTL matrix.cpp 中,我没有找到任何释放内存的函数。

对于 kill(),实现大约为 swap()

template<class T>
void Mat<T>::kill()  
{  
   Mat<T> tmp;
   this->swap(tmp);
}  

void swap(Mat& other)
   {
      _mat__rep.swap(other._mat__rep);
      _ntl_swap(_mat__numcols,other._mat__numcols);
   }

template<class T>
void _ntl_swap(T*& a,T*& b)
{
   T* t = a; a = b; b = t;
}

这不能帮助释放矩阵的内存。使用后如何释放内存?

解决方法

kill() 函数应该这样做。
假设实现 Mat::~Mat() 以释放内存。

template<class T>
void Mat<T>::kill()  
{  
   // This allocates an object with absolute minimum size (probably zero).
   Mat<T> tmp;


   // Now you swap the zero size matrix with your current matrix
   // memory. 
   this->swap(tmp);

   // So your object `this` now holds a zero size matrix.
   // While the object `tmp` holds what used to be in this object.
   // So all the dynamically allocated memory is now inside `tmp`
}
// At this point `tmp` goes out of scope.
// This causes the destructor of `tmp` to be called which
// deallocates the memory that you used to have.
//
// So at this point your object holds a mtrix of zero size.
// and all the old memory has been deallocated.

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...