指针的最后三位永远是0

深入理解nginx中,第9章中有一句:利用指针的最后一位一定是0的特性。能解释一下这个特性?



字节对齐和系统有关,也和编译器有关,具体到底是几字节对齐和本问题关系不大。主要是因为无论如何对齐,都是字节对齐,而不是bit对齐。也就是说指针的起始存放地址只可能是8的倍数,比如0x00,0x08,0x10,转换成二进制后三位永远是0。不可能出现0x02到0x22作为一个四字节的指针。ps1:有些资料中将之描述为指针的后2位永远是0,猜想是汇编语言中好像有的语句可以把4bit看作一个基本的操作单位,所以只能保证指针的后2位永远是0。ps2:是否可以申请一个数组,然后对其中的位进行操作,使之出现一个类似0x02到0x22作为一个四字节指针的情况,将这个畸形的指针传入指针操作API中会导致什么后果,这个问题还有待考证。

https://www.zhihu.com/question/40636241/answer/311889614


Category linux