据我所知,在32位系统上,指针的大小通常为4个字节,在64位系统上,指针的大小为8个字节。但据我所知,并不是所有的位都用于存储地址。如果是这样,将空闲位用于其他目的是否安全?如果是这样,在指针存储空间中,在32位和64位系统上,如何以及多少可用位可用?
答案 0 :(得分:8)
在编写当前的64位Intel芯片时,内部使用48位指针。
我遇到的每个C ++编译器都将这个48位指针抽象为一个64位指针,其中最高有效16位设置为零。
但是使用任何空闲位的行为是未定义。
在标准的32位芯片快要用完时,可能有4GB的物理内存,更不用说虚拟内存了。所有32位都用作指针。
答案 1 :(得分:3)
不能将指针值中的任何位用于其他目的。
您可以查看所用平台的文档,以查看它是否保证指针值中的任何特定位都可使用。即使它们没有直接参与寻址,也有可能保留给平台使用。