如何计算Eigen库SparseMatrix对象的实际占用字节数?
Eigen稀疏矩阵实际内存占用计算
我用Eigen库定义了一个稀疏矩阵:
Eigen::SparseMatrix<float> MyMatrix(2**n, 2**n);
同时调用reserve函数预分配空间:
MyMatrix.reserve(Eigen::VectorXi::Constant(2**n, n+1));
该矩阵每列有n+1个非零元素,总共有2^n列,我想知道这个对象实际占用的字节数。
我尝试过两种方法,但都没得到正确结果:
- 调用
MyMatrix.size():返回的是行数乘列数,这不是实际存储的大小。比如创建2^25 * 2^25规模的float类型稀疏矩阵,按行列乘积计算约占10^15字节,这显然不可能,我也通过内存验证了这一点。 - 调用
sizeof(MyMatrix):无论n取何值,结果都是72,这只是类本身的固定开销,和对象实际存储的数据无关。
更新2:正确的计算方式如下:
每个已预留(或已使用)的元素占用1个float和1个int,每列占用2个int,再加上矩阵的固定开销
sizeof(Matrix)
内容的提问来源于stack exchange,提问作者Matteo
相关产品推荐
相关产品推荐

