为什么与混合数据类型的位字段相比,相同数据类型的位字段的大小更小

mah*_*esh 5 c c++ bit-fields

我很想知道为什么具有相同数据类型的位字段比使用混合数据类型更小.

struct xyz 
{ 
  int x : 1; 
  int y : 1; 
  int z : 1; 
}; 


struct abc 
{ 
  char x : 1; 
  int y : 1; 
  bool z : 1; 
}; 
Run Code Online (Sandbox Code Playgroud)

sizeof(xyz)= 4 sizeof(abc)= 12.

我正在使用VS 2005,64位x86机器.

一台机器/编译器级别的答案会很棒.

gre*_*ade 5

结盟。

您的编译器将以对您的架构有意义的方式对齐变量。在您的情况下,char, int, 和bool是不同的大小,因此它将通过该信息而不是您的位字段提示。

这个问题上有一些讨论。

解决方案是给#pragma指令或__attributes__编译器指示它忽略对齐优化。

  • 尽管有些人否认,但学习机器体系结构和编译器构造对程序员仍然有用的另一个原因。 (2认同)