我正在通过编译器负责对齐,如下面的链接所述。
http://vcfaq.mvps.org/lang/11.htm
我在我们必须以编程方式对齐哪些场景以及编译器将为我们做什么场景的情况下概括我的问题?
填充是否需要两个具有不同端序类型的机器,即一个m / c是大端,而另一个是小端,并且通过TCP / IP协议进行通信,填充是否需要这个?
请澄清我的问题。
谢谢!
答案 0 :(得分:2)
当您通过write()
(或任何函数)发送原始结构时,您只需要担心填充和对齐。请查看编译器文档,了解如何强制编译器关闭填充,并在1字节边界上对齐,如果发送结构是您真正想要做的。但是,仅在网络层中执行此操作,因为您实际上关闭了要编译的体系结构的数据优化。如果您在特定于应用程序的算法(大量读取和写入)中使用结构,如果您使用对齐和填充设置,将会失去性能。
此外,您还必须确保结构的所有字段都采用双方同意的字节顺序。填充和对齐不会影响结束。
答案 1 :(得分:1)
TCP / IP将网络字节顺序定义为Big-Endian。具有Little-Endian体系结构的计算机必须在传输数据之前和接收数据之后将TCP / IP头信息中的字节重新排序为Big-Endian格式。
TCP / IP套件中的所有协议层都被定义为big-endian。
填充/对齐不受字节顺序的影响。