memcmp比较两个内存地址

发布时间 2023-12-18 00:03:45作者: 未全知

问题

在实际的开发过程中,遇到了在x64系统下使用宏定义创建一个注册表对象的情景,但是发现实际上的低32位是正常的句柄的位置,但是高32位的数值被初始化位0xffffffff,然后需要和他比较的值在初始化的时候直接设置成了NULL,所以在毕节两个值的时候出现了低位相同但是高位的值一个是0xffffffff,一个是0x00000000。

发现原因

最开始以为是宏定义的原因,所以一直在查看宏定义的问题,但是在查找了官方关于64位系统的说明之后发现,如果一个32位指针在64位系统或者软件中,拓展出来的高32位会被初始化为1,所以出现了fffffff的值,这个在官方里是明确说明的,所以我们遇到的问题是没有问题,他的出现是正确的

解决

把和当前值比较的值初始化的时候不能把高位设置成0,或者直接使用memcmp比较变量指针的低32位,我使用的方法是后者。但是在其他场景可能会出现问题,一个本身是64位的指针值,他的高位是有意义的,所以当前的处理方式只限制于本身是32位的指针被拓展到64位高位被系统填充F的对象。