為什么一個指針在32位系統中占4個字節,在64位系統中占8個字節?


一個指針在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
*/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM