gpt4 book ai didi

c++ - 具有特征矩阵的类的连续数据?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:47 26 4
gpt4 key购买 nike

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

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() )

在其他帖子中提到了一些关于 #pragma pack 等等的内容?这里需要吗? Link

还是将成员打包到一个struct

中更好

非常感谢:-)

最佳答案

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

除此之外,您还必须保证两个程序之间的对齐方式没有改变(通过打开一些优化选项很容易改变它,更不用说移植到另一个架构了)。

一种正确的序列化方法是编写您自己的序列化代码以可移植的方式编写内容,或者(更好的是)找到一个现成的代码(取决于您的库)。

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

关于c++ - 具有特征矩阵的类的连续数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19549223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com