我正在学习C语言的基础知识,现在来到了位域结构体章节。书中展示了一个包含不同类型数据的结构体例子:多种布尔类型和多种无符号整数。
书中声明该结构体大小为16位,而如果不使用填充(padding),该结构体大小将只有10位。
这是书中例子所使用的结构体:
#include <stdio.h>
#include <stdbool.h>
struct test{
bool opaque : 1;
unsigned int fill_color : 3;
unsigned int : 4;
bool show_border : 1;
unsigned int border_color : 3;
unsigned int border_style : 2;
unsigned int : 2;
};
int main(void)
{
struct test Test;
printf("%zu\n", sizeof(Test));
return 0;
}
为什么在我的编译器上,相同的结构在加上填充后占用16个字节(而不是位),没有填充则占用16个字节?
我正在使用
GCC (tdm-1) 4.9.2 compiler;
Code::Blocks as IDE.
Windows 7 64 Bit
Intel CPU 64 bit
这是我得到的结果:
这是一个例子所在页面的图片:
_Bool
、signed int
、unsigned int
或其他一些实现定义的类型。原子类型是否允许是实现定义的。” - Andrew Henle