是否有符合C标准的方法来进行结构对齐?
我知道可以把最大的元素放在第一位,但我正处于我即将实施协议的状态。
答案 0 :(得分:2)
不,不是一般的。
您绝对无法更改结构中元素的顺序,它们必须与声明的顺序完全相同。
但在对齐方面,你也无法事先知道未来的处理器会更喜欢什么。
协议(“外部”表示)永远不会直接复制到内存中的struct
;相反,您必须自己序列化/反序列化每个结构成员。
答案 1 :(得分:1)
为了实现协议,最好根据需要序列化值并反序列化它们。
这保持了不同数据字段大小,对齐要求和字节顺序的架构之间的兼容性。
答案 2 :(得分:0)
您可以使用_Alignas
关键字在C11中指定对齐方式(另请参阅stdalign.h
)。您可以在免费提供的draft of the C11 standard中查找。
答案 3 :(得分:0)
取决于某种指令可能不是一个好主意。我不会这样做。定制序列化器/解串器是此处的标准。
我建议编写一个简单的解析器来处理struct
声明并准备一组序列化/反序列化函数。如果它是一个简单的普通旧数据结构,解析器和代码生成器将非常简单和有效。
答案 4 :(得分:0)
听起来你打算做一个类似联合覆盖的东西来编码/解码协议。这是一个坏主意。按字段进行正确的序列化/反序列化要好得多。 这更便携。