- 课程名称:Linux C语言结构体
- 课程链接:https://www.imooc.com/learn/409
- 章节名称:
- 第4章:共用体
- 4-1 共用体
- 讲师姓名:
雷过就跑
- 第4章:共用体
- 时间:2023-02-07 23:30
课程内容
- 共用体:关键字
union
- 作用:让几个不同类型的变量,共享同一个内存地地
- 好处:节省空间
- 缺点:同一时刻,仅能存取一个成员
- 其长度,是其成员类型中最大的长度的长度值
- 结构体空间大小问题
- 这里面涉及到一字节对齐问题,这个对齐可以帮助计算机快速读写
- 结构体空间大小计算公式
- 结构体中最后一个成员的偏移量,加该成员大小,再加上填充的字节数
- 偏移量:某一个成员的实际地址和这个结构体首地址的距离
struct data {int a; char b; int c;}
- 结构体在进行字节对齐的时候,有这样一个准则,每个成员相对于首地址的偏移量,都要是当前成员所占内存大小的整数倍,如果不是整数倍就要加上填充字节
- 成员a的偏移量就是0,因为是第一个成员
- 成员b的偏移量是4,其本身大小为1字节,4是1的整数倍,可以不用填充字节
- 成员c的偏移量是5,其本身大小为4,5不是其整数倍,为了满足整数倍关系,要在b成员后面填充字节,数量是3字节,从而使用c的偏移量为8,8是4的整数倍
- 最后还要看结构体总大小,是不是结构体中最宽的成员大小的整数倍,如果不是要在最后一成员后填充字节,从而满足整数倍关系
学习心得
没想到结构体的大小计算模式这么复杂