在编写C代码的过程中,指针是一个频繁出现且极为重要的元素,可以说是无处不在。实际上,我们还能对指针进行一些巧妙的额外运用,比如在指针里偷偷存储一些额外的信息。而实现这一巧妙技巧的关键,就在于巧妙利用内存中数据的自然对齐特性。
内存里的数据存储并非随意安排在任意地址上。处理器在读取内存时,总是按照与自身字长相同大小的块来进行读取。从提高效率的角度出发,编译器会将内存中的各种实体(如变量等)的地址,分配为它们自身大小(以字节为单位)的整数倍。举个例子,在32位处理器的环境下,一个占据4字节空间的整数类型数据,必然会被存储在能被4整除的内存地址之上。
在这里,我们先设定一个前提条件,假设在某个系统中,int
类型(整数类型)所占用的空间大小,和指针类型所占用的空间大小,都是4字节。
接下来,让我们来深入思考一个指向int
类型数据的指针。就像前面所提到的那样,int
类型的数据有可能被存储在像0x1000
、0x1004
或者0x1008
这样的