C++ 数据结构对齐以在C+中实现序列化+;
我了解数据结构对齐理论,并使用该理论实现序列化。 然而,我很难开始真正的代码。 有人能给我举个简单的例子来说明这是如何工作的吗 比如说:C++ 数据结构对齐以在C+中实现序列化+;,c++,serialization,memory-alignment,C++,Serialization,Memory Alignment,我了解数据结构对齐理论,并使用该理论实现序列化。 然而,我很难开始真正的代码。 有人能给我举个简单的例子来说明这是如何工作的吗 比如说: Class A { private: int a; char b; double c; char d; char e; public: void serialize(char * str); }; 如何实现serialize方法来存储对齐的数据?我应该对数据结构重新排序并填充它吗?或者
Class A {
private:
int a;
char b;
double c;
char d;
char e;
public:
void serialize(char * str);
};
如何实现serialize方法来存储对齐的数据?我应该对数据结构重新排序并填充它吗?或者…对齐和序列化是两个正交的方面。 前者涉及数据结构的内存表示,而后者涉及其顺序形式的等效表示。换句话说,一旦数据结构被序列化为字节流,对齐就不再相关。类似地,当引用序列化字节流时,对齐的概念没有意义
也就是说,您应该分别解决每个问题,而不是试图找到一个联合的解决方案。内存中的数据对齐和序列化是两个正交的方面。事实上,一旦数据被序列化为字节流,对齐就不再是一个问题。@MatthiasVallentin请在有人提议使用
memcpy
或一些类似函数之前将您的评论转化为答案。您可以检查Google协议缓冲区,而不是自己进行序列化:。。。这将以“正确的方式”为您处理很多细节。您不必做任何事情来调整数据结构。编译器会帮你做这件事。你的问题还不清楚。我们的想法是首先需要调整数据结构,以获得较小规模的数据结构。然后,使用memcpy()将值传递给char*。通过这种方式,将缓冲区发送出去。如果您计划以任何方式共享序列化结构(例如,通过网络发送,将其写入其他计算机可能读取的文件),则使用memcpy
方法将遇到麻烦。对齐然后成为许多问题中的一个,例如,您还必须考虑字节顺序。这不是序列化数据结构的方式。(@Andre已经在评论中暗示了这一点。)