C++ 特征矩阵类的连续数据?

C++ 特征矩阵类的连续数据?,c++,memory-alignment,C++,Memory Alignment,这个简单类的类成员在内存中是连续的吗 class A{ A(){ /* somecode */} ~A(); Eigen::Matrix<5,1,double> a; Eigen::Matrix<9,1,double> b; }; std::vector<A> vec(10); char * p = interprete_cast<char*>(&vec[0]); // the pointer p ca

这个简单类的类成员在内存中是连续的吗

class A{
    A(){ /* somecode */}
    ~A();
    Eigen::Matrix<5,1,double> a;
    Eigen::Matrix<9,1,double> b;
};

std::vector<A> vec(10);

char * p = interprete_cast<char*>(&vec[0]);

// the pointer p can now continously access all "a" and "b" in continous order ->  (a,b,...,a,b)

// For example write all data to a binary file!
file.write( p, sizeof(A)*vec.size() )
A类{
A(){/*somecode*/}
~A();
特征矩阵a;
本征矩阵b;
};
向量

还是将成员打包到
struct


非常感谢:-)

这是一种很糟糕的序列化方式。最有可能的是,
Eigen::Matrix
对象涉及堆分配(即它们有指针),这意味着您在反序列化它们时会感到意外

除此之外,您还必须保证两个程序之间的一致性没有改变(通过启用一些优化选项,更不用说通过移植到另一个体系结构,很容易改变它)

一种合适的序列化方法是,要么编写自己的序列化代码,以可移植的方式编写内容,要么(更好地)找到一个随时可用的代码(取决于您的库)


返回您的问题-不,不能保证
A
的实例是连续的。事实上,它们很可能与“自然”字长对齐(如果
sizeof(A)
可被该字长整除,则它们将是连续的)。

您可以做一个简单的测试:比较
sizeof(A)
sizeof(A::A)+sizeof(A::b)
。如果值不相等,则在某处有一个填充。