结构可以小于其组件的总和吗?

124*_*123 6 c struct sizeof

我知道编译器可能会在结构中添加一些填充字节.但是,当编译器发现我们从未从结构中的变量中读取时,结构的大小会比成员的总大小小吗?

struct Foo_T
{
  int a;
  intmax_t b;
};


void bar(void)
{
  struct Foo_T foo;
  foo.a=rand();
  someFunction(foo.a);
  //i never access foo.b, only foo.a
  if(sizeof(foo)< sizeof(int)+sizeof(intmax_t))
    {
      //is it possible that we can end here?
    }
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*way 7

不,这是C标准所禁止的.在C11中,第6.7.2.1节包含以下声明:

15在结构对象中,非位字段成员和位字段所在的单元具有按声明顺序增加的地址.[...]结构对象中可能有未命名的填充,但不是在其开头.

删除a的成员struct将违反成员具有按声明顺序增加的地址的要求.