Loading

指针大小与32位、64位系统

某天写程序时输出了 sizeof() 某整型指针,结果发现居然不是 4,非常惊讶,如下:

下面就来解释一下为什么:

无论内存地址还是其他数据,在运算时都需要保存在寄存器之中,而结果是 8,说明了寄存器的大小是 8 个字节,即 64 bit。

我们经常说32位系统或者64位系统,实际上说的是 CPU 一次处理数据的能力。

我们可以将其理解为整个数据通路包括寄存器、处理器、总线等等都是 32 或 64 位(虽然不全是这样)。

64位计算机架构一般具有 64 位宽的整数型寄存器,而只有整数寄存器(integer register)才可存放指针值(内存数据的地址),因此指针的大小就自然是 8 个字节了。

在 32 位系统中,地址的大小是 32 bit,因此其最大寻址空间为 pow(2, 32) = 4GB,也即 32 位系统可以支持的最大内存为 4GB;而在 64 位系统中,其最大寻址空间为 2 的 64 次方。

posted @ 2020-05-23 22:44  Lowell_liu  阅读(7006)  评论(0编辑  收藏  举报