如何解决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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。