#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. 我知道一些对齐发生在这里,但我不知道为什么,因为结构x是正好16个字节。 有人可以解释这一点。 感谢sizeof没有显示预期的输出
您正在使用位字段:K&R第150页:*”几乎所有关于位域的东西都是依赖于实现的“*”。我个人会忽略“几乎”。 – cdarke
@cd他们说*几乎*因为其余未指定;) – ouah