一個指針在64位的計算機上,占8個字節;
一個指針在32位的計算機上,占4個字節。
原因如下:
我們都知道cpu是無法直接在硬盤上讀取數據的,而是通過內存讀取。cpu通過地址總線、數據總線、控制總線三條線對內存中的數據進行傳輸和操作。
具體流程:
1、cpu通過地址總線,找到該條數據;
2、通過控制總線得知該操作是讀操作還是寫操作;
3、通過數據總線將該數據讀取到cpu或者從cpu寫到內存中。
所以,
地址總線的寬度決定了CPU的尋址能力;
數據總線的寬度決定了CPU單次數據傳輸的傳送量,也就是數據傳輸速度;
控制總線決定了CPU對其他控件的控制能力以及控制方式
我們平時所說的計算機是64位、32位、16位,指的是計算機CPU中通用寄存器一次性處理、傳輸、暫時存儲的信息的最大長度。即CPU在單位時間內(同一時間)能一次處理的二進制數的位數。
假如,某計算機的地址總線是64位,那么其一次可以在2^64種可能中尋找一個地址,也就是其描述的地址空間為0x0000 0000 0000 0000 0000 0000 0000 0000 ~ 2^64-1。
我們一般需要64個0或1的組合就可以找到內存中所有的地址,而64個0或1的組合,就是64個位,也就是4個字節的大小,因此,我們只需要8個字節就可以找到所有的數據。所以,在64位的計算機中,指針占8個字節。同理,在32位的計算機中,指針占4個字節。
同時也可以看出,由於地址總線為64,那么每次尋址的空間為0x0000 0000 0000 0000 0000 0000 0000 0000 ~ 2^64-1,那么CPU的最大內存為2^64Byte
舉個例子
內存地址就像一條路上的門牌號,用幾位表示需要看門牌數量。
門牌好從0號開始編排,到2^64-1號結束,一共就有2^64個門牌號。分別為二進制的
000000000000000000000000000000000000000000000000000000號
000000000000000000000000000000000000000000000000000001號
000000000000000000000000000000000000000000000000000010號
最后
1111111111111111111111111111111111111111111111111111111111110號
1111111111111111111111111111111111111111111111111111111111111號
每個門牌的號碼是64位(二進制),一個字節為8位,64位就是8字節。
也就是在64位系統中,cpu會通過地址總線在2^64個地址中尋找其中的某一個地址值的數據,所以8個字節的指針就可以代表內存中任意位置的一個地址值,所以指針占8個字節就足夠用了。
其他知識點:
數據存儲是以“字節”(Byte)為單位,數據傳輸大多是以“位”(bit,又名“比特”)為單位,一個位就代表一個0或1(即二進制),每8個位(bit,簡寫為b)組成一個字節(Byte,簡寫為B),是最小一級的信息單位。
1bit就是二進制的0和1
1字節(Byte) = 8位(bit)=8比特
1個英文字母(不分大小寫)占一個字節的空間
計算機能夠處理的最小單元是 字節 而不是位
常用數據類型所占用的內存空間:
/*部分數據類型的取值范圍: int:-2147483648~2147483647 unsigned int:0~4294967295 short:-32768~32767 unsigned short:0~65535 long: -2147483648~2147483647 unsigned long:0~4294967295 */