#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字节