C标准符合方式进行结构对齐

时间:2013-10-28 11:17:02

标签: c

是否有符合C标准的方法来进行结构对齐?

我知道可以把最大的元素放在第一位,但我正处于我即将实施协议的状态。

5 个答案:

答案 0 :(得分:2)

不,不是一般的。

您绝对无法更改结构中元素的顺序,它们必须与声明的顺序完全相同。

但在对齐方面,你也无法事先知道未来的处理器会更喜欢什么。

协议(“外部”表示)永远不会直接复制到内存中的struct;相反,您必须自己序列化/反序列化每个结构成员。

答案 1 :(得分:1)

为了实现协议,最好根据需要序列化值并反序列化它们。

这保持了不同数据字段大小,对齐要求和字节顺序的架构之间的兼容性。

答案 2 :(得分:0)

您可以使用_Alignas关键字在C11中指定对齐方式(另请参阅stdalign.h)。您可以在免费提供的draft of the C11 standard中查找。

答案 3 :(得分:0)

取决于某种指令可能不是一个好主意。我不会这样做。定制序列化器/解串器是此处的标准。

我建议编写一个简单的解析器来处理struct声明并准备一组序列化/反序列化函数。如果它是一个简单的普通旧数据结构,解析器和代码生成器将非常简单和有效。

答案 4 :(得分:0)

听起来你打算做一个类似联合覆盖的东西来编码/解码协议。这是一个坏主意。按字段进行正确的序列化/反序列化要好得多。 这更便携。

相关问题