某天寫程序時輸出了 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 次方。