除非使用打包编译器选项或编译指示,否则代码如下(假设 8 位 char 和 16 位短)
struct foo
{
short a ;
char b ;
short c ;
} ;
据我所知,在c
我们的产品支持的所有平台(不少)上,最后都会有一个 1 字节的对齐垫。
我不记得看到没有在b
and之间放置对齐填充的任何平台c
,但可以想象编译器可以合法地将填充放在a
and之间b
。
(动机:我们在我们的代码中引入了一些基础设施,以确保当前写入磁盘或涉及网络流的某些结构的二进制兼容性,并且在可能的情况下,希望插入显式填充,以便其他开发人员知道额外的这些数据结构在幕后消耗的存储空间)。
有谁知道一个平台,其编译器不会在需要时将对齐填充放在将不对齐的成员之前?