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

扫描二维码关注微信公众号,回复密码,即可获取密码
阅读剩余
版权声明:
作者:讳疾忌医-note
链接:https://www.1217zy.vip/archives/85
文章版权归作者所有,未经允许请勿转载。
THE END