数据对齐是为了提高 CPU 读取数据的效率,CPU 每次访问内存只能通过单个 memory word 来访问,比如对于 int32 大小的数据,在数据对齐的情况下,CPU 可以通过单次访问完成数据读取, 但如果数据没对齐,数据的一部分在这个 memory word,一部分在另一个 memory word,CPU 就需要访问两次内存。
所以,编译器通常会在没有对齐的字段前面 padding 几个字节来对齐。
padding 字节数的计算公式为:
padding = (align - (offset mod align)) mod align aligned = offset + padding = offset + ((align - (offset mod align)) mod align)