前言
字节对齐是我们初学 C语言 就会接触到的一个概念,但是到底什么是字节对齐?对齐准则又是什么?为什么要字节对齐呢?字节对齐对我们编程有什么启示?本文将简单理一理字节对齐的那些事。
什么是字节对齐
计算机中内存大小的基本单位是字节(byte),理论上来讲,可以从任意地址访问某种基本数据类型,但是实际上,计算机并非逐字节大小读写内存,而是以2,4,或8的 倍数的字节块来读写内存,如此一来就会对基本数据类型的合法地址作出一些限制,即它的地址必须是2,4或8的倍数。那么就要求各种数据类型按照一定的规则在空间上排列,这就是对齐。
对齐准则是什么
总的来说,字节对齐有以下准则:
结构体变量的首地址能够被其最大基本类型成员字节数大小所整除。
结构体每个成员相对结构体首地址的偏移都是成员大小的整数倍,如不满足,对前一个成员填充字节以满足。
结构体的总大小为结构体对最大成员大小的整数倍,如不满足,最后填充字节以满足。
我们通过一个小例子来说明是如何对齐的。
考虑下面的程序:
/*========================================================