存储指针值需要多少位?
How many bits are required to store the pointer value?
据我所知,指针的大小在32位系统上通常是4个字节,在64位系统上是8个字节。但据我所知,并非所有位都用于存储地址。如果是这样,将免费位用于其他目的是否安全?如果是这样,在 32 位和 64 位系统上,指针内存中有多少空闲位可用,如何可用?space?
在撰写本文时,当前的 64 位 Intel 芯片在内部使用 48 位指针。
我遇到的每个 C++ 编译器都将这个 48 位指针抽象为一个 64 位指针,其中最高有效的 16 位设置为零。
但是使用任何空闲位的行为是未定义。
在 32 位芯片成为常态的末期,可能有 4GB 的物理内存,更不用说虚拟内存了。所有 32 位都用于指针。
将指针值中的任何位用于不同目的是不可移植的。
您可以查看您的平台的文档,看看它是否保证指针值中的任何特定位都可以使用。很可能即使它们不直接参与寻址,它们也是保留给平台使用的。
据我所知,指针的大小在32位系统上通常是4个字节,在64位系统上是8个字节。但据我所知,并非所有位都用于存储地址。如果是这样,将免费位用于其他目的是否安全?如果是这样,在 32 位和 64 位系统上,指针内存中有多少空闲位可用,如何可用?space?
在撰写本文时,当前的 64 位 Intel 芯片在内部使用 48 位指针。
我遇到的每个 C++ 编译器都将这个 48 位指针抽象为一个 64 位指针,其中最高有效的 16 位设置为零。
但是使用任何空闲位的行为是未定义。
在 32 位芯片成为常态的末期,可能有 4GB 的物理内存,更不用说虚拟内存了。所有 32 位都用于指针。
将指针值中的任何位用于不同目的是不可移植的。
您可以查看您的平台的文档,看看它是否保证指针值中的任何特定位都可以使用。很可能即使它们不直接参与寻址,它们也是保留给平台使用的。