![58e6ac6f509bba5737577fbf18a76567.png](https://img-blog.csdnimg.cn/img_convert/58e6ac6f509bba5737577fbf18a76567.png)
不论身在互联网大厂与否,很多C语言开发者们在项目中都会遇到一种情况:很多结构体中都会用到位变量作为一个开关标识。例如下面这个例子,
typedef struct connection_s { int sockfd; chain_t *recv_chain_head; chain_t *recv_chain_tail; chain_t *send_chain_head; chain_t *send_chain_tail; struct connection_s *next; unsigned int closed:1;} connection_t;
假设我们是在一台32位Linux操作系统中编译连接运行的。那么这个结构体占了多大空间呢?
这个问题涉及到两方面知识点:
- 位变量
- 结构体对齐规则
位变量:就是closed的写法,即在变量名后跟:n,n位占用的位数。换言之,虽然closed声明位unsigned int(32位),但它只用到了1位,额外31位和它无关,对它的操作也影响不到额外31位。
结构体对齐:相信很