c-如何用位域计算结构的大小


#include <stdio.h> 
struct test { 
unsigned int x; 
long int y : 33; 
unsigned int z; 
};  
int main() 
{ 
struct test t; 
printf("%d", sizeof(t)); 
return 0; 

}

我得到的输出是24。它怎么等同于那个?

由于您的实现在您的系统上接受long int y : 33;一个超过32位的长整数,所以我假设为64。

如果普通int也是64位,则24的结果是正常的。

如果它们只有32位,则会遇到填充对齐。出于性能原因,64位系统上的64位类型在64位边界上对齐。所以你有:

  • 第一个int为4个字节
  • 4个填充字节,以具有8个字节的边界
  • 位字段的容器为8个字节
  • 第二个int为4字节
  • 4个填充字节以允许正确对齐数组

总计:24字节

最新更新