2
#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。它如何等同于那个?

4

1 回答 1

3

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

如果plainint也是64位,24的结果是正常的。

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

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

总计:24 字节

于 2021-03-12T14:20:49.207 回答