Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数据结构对齐以在C+中实现序列化+;_C++_Serialization_Memory Alignment - Fatal编程技术网

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已经在评论中暗示了这一点。)