写了一个ts转h264的流程,在代码review的时候被指出了结构体字节没有对齐问题,其实这个问题在公司笔试的时候就遇到过,当时没有重视,今天就来学习一下。
- 结构体中的变量是按照定义顺序放入到内存中的
- 结构体中的变量在内存中并非紧密排列。
- 结构体中的每个变量在放入内存的时候认为结构体是按照自己的大小划分的。因此变量从其大小的整数倍开始存储。
- 比如struct X{char a, int b, double c} x;
- a占一个字节,从相对位置0开始存储
- b占四个字节,从相对位置
- c占8个字节,从相对位置
-
0 a 8 c 1 9 c 2 10 c 3 11 c 4 b 12 c 5 b 13 c 6 b 14 c 7 b 15 c - 所以有一个原则就是先写小的,后写大的。相同大小要写在一起。
- 那如果有一个struct X{char a, double b, int c} x;按照字节对齐原则,应该占用了8+8+4 = 20字节,其实如果结构体所占字节数不是最宽字节的整数倍是需要补齐的。也就是说实际上这个结构体在内存中为24字节。