0

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

我知道可以将最大的元素放在首位,但我正处于即将实施协议的情况。

4

5 回答 5

2

不,一般不会。

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

但是您也无法提前知道某些未来处理器会在对齐方面更喜欢什么。

协议(它们是“外部”表示)绝不应该涉及直接复制到struct内存中的 a 或从 a 中复制;相反,您必须自行序列化/反序列化每个结构成员。

于 2013-10-28T11:20:33.110 回答
1

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

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

于 2013-10-28T11:22:46.823 回答
0

您可以在 C11 中使用_Alignas关键字指定对齐方式(另请参见 参考资料stdalign.h)。您可以在免费提供的 C11 标准草案中查找它。

于 2013-10-28T11:27:20.573 回答
0

听起来您打算做类似联合覆盖之类的事情来编码/解码协议。这是一个坏主意。逐字段进行适当的序列化/反序列化要好得多。这更便携。

于 2013-10-28T12:50:12.310 回答
0

依赖于某种指令可能不是一个好主意。我不会这样做。自定义序列化器/反序列化器是这里的标准。

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

于 2013-10-28T11:34:55.163 回答