#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;
系统上的 long int 长度超过 32 位,因此我假设为 64 位。
如果普通int
也是64位,则24的结果是正常的。
如果它们只有 32 位,则您遇到了填充和对齐。出于性能原因,64 位系统上的 64 位类型在 64 位边界上对齐。所以你有:
- 第一个 int 为 4 个字节
- 4 个填充字节以达到 8 字节边界
- 位域容器8个字节
- 第二个 int 为 4 个字节
- 4 个填充字节以允许数组正确对齐
总计:24 字节
关于c - 如何计算带位域的结构体的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66601301/