【发布时间】:2013-01-07 19:38:15
【问题描述】:
#include <stdint.h>
#include <stdio.h>
typedef union {
uint64_t u[2];
struct {
uint64_t a:30;
uint64_t b:30;
uint64_t c:30;
uint64_t d:30;
uint64_t e:8;
}x;
} mystruct;
int main()
{
printf("Size %d\n", sizeof(mystruct));
}
我正在尝试在 64 位机器上编译它。预期的输出是 16,但我得到了 24。 我知道这里发生了一些对齐,但我不确定为什么 struct x 正好是 16 个字节。 有人可以解释一下吗。 谢谢
【问题讨论】:
-
您正在使用位域:K&R 第 150 页:“关于位域的几乎所有内容都取决于实现”。我个人会省略“几乎”。
-
@cdark 他们说几乎,因为其余部分未指定;)
标签: c structure sizeof bit-fields