是否有符合 C 标准的方法来进行结构对齐?
我知道可以将最大的元素放在首位,但我正处于即将实施协议的情况。
不,一般不会。
您绝对不能更改结构中元素的顺序,它们必须与声明的顺序完全相同。
但是您也无法提前知道某些未来处理器会在对齐方面更喜欢什么。
协议(它们是“外部”表示)绝不应该涉及直接复制到struct
内存中的 a 或从 a 中复制;相反,您必须自行序列化/反序列化每个结构成员。
为了实现一个协议,最好根据需要序列化这些值并反序列化它们。
这在具有不同数据字段大小、对齐要求和字节序的架构之间保持了兼容性。
您可以在 C11 中使用_Alignas
关键字指定对齐方式(另请参见 参考资料stdalign.h
)。您可以在免费提供的 C11 标准草案中查找它。
听起来您打算做类似联合覆盖之类的事情来编码/解码协议。这是一个坏主意。逐字段进行适当的序列化/反序列化要好得多。这更便携。
依赖于某种指令可能不是一个好主意。我不会这样做。自定义序列化器/反序列化器是这里的标准。
我建议编写一个简单的解析器来处理struct
声明并准备一组序列化/反序列化函数。如果是简单的普通旧数据结构,解析器和代码生成器将非常简单高效。