boost压缩矩阵存储

use*_*215 2 c++ boost sparse-matrix

提升ublas::compressed_matrix应该只为非零元素分配空间。但在下面的例子中,我得到了奇怪的结果。

#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/io.hpp>

using namespace std;
using namespace boost::numeric::ublas;

int main () {
{
    compressed_matrix<double,row_major> m (4, 4, 2*2);
    cout << sizeof(m) << "\n";    // prints 56
    cout << m << std::endl;
}

{
    matrix<double> m (4, 4);
    cout << sizeof(m) << "\n";    // prints 20
    cout << m << std::endl;
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么ublas::matix只取20字节4x4 matrix(而不是8*4*4=128字节),ublas::compressed_matrix而非2*2=4零元素则取56字节(而不是4*8=32字节)?

我还很困惑如何指定 中非零元素的位置ublas::compressed_matrix。如果我尝试存储超过构造函数中设置的非零元素数量,会发生什么情况?

请帮忙澄清一下。

ues*_*esp 5

sizeof() 是一个编译时运算符,仅查看对象的直接大小,而不查看对象在运行时可能进行的任何分配。例如:

class SizeTest
{
public:

    char* m_pData;

    SizeTest()
    {
        m_pData = new char[1000];
    }
};

int main (void)
{
    SizeTest Test;
    cout << sizeof(Test) << "\n";  //Probably prints 4 depending on your system
    return 0;
}
Run Code Online (Sandbox Code Playgroud)