內存地址與內存空間


概覽

  1. 基本概念
  2. 進入誤區
  3. 誤區診斷
  4. 總結

基本概念

  • 什么是位?    
  • 什么是字節?

    位表示的是二進制位,一般稱為比特,即0或1,是計算機存儲的最小單位;

    字節是計算機中數據處理的基本單位;

    計算機中以字節為單位存儲和解 釋信息,規定一個字節由八個二進制位構成,即1個字節等於8個比特。

                      1Byte=8bit

  • 地址總線?

  

  (1)CPU是通過地址總線來指定存儲單元的。

  (2)地址總線決定了cpu所能訪問的最大內存空間的大小。

  (3)地址總線是地址線數量之和。

  • 內存地址?

    是一種用於軟件及硬件等不同層級中的數據概念,用來訪問電腦主存中的數據。

        

    內存地址只是一個編號,代表一個內存空間

  • 尋址空間

    尋址空間一般指的是CPU對於內存尋址的能力。通俗地說,就是能最多用到多少內存的一個問題。數據在存儲器(RAM)中存放是有規律的 ,CPU在運算的時候需要把數據提取出來就需要知道數據存放在哪里 ,這時候就需要挨家挨戶的找,這就叫做尋址,但如果地址太多超出了CPU的能力范圍,CPU就無法找到數據了。 CPU最大能查找多大范圍的地址叫做尋址能力 ,CPU的尋址能力以字節為單位 ,如32位尋址的CPU可以尋址2的32次方大小的地址也就是4G,這也是為什么32位的CPU最大能搭配4G內存的原因 ,再多的話CPU就找不到了。

 

誤區時刻

   前方高能,請謹慎駕駛!接下來進入“誤區時刻”,什么鬼?

  

  不着急,我們慢慢往下看,跟着我的思路,落入我的陷阱!哈哈....

      

   按照上圖,8位的cpu地址總線的寬度是8,即8位占1字節;16位cpu地址總線的寬度為20(cpu內部有個加法計算器,將16位寬度通過加法計算器加到20位),即16位占2字節;32位的cpu地址總線寬度為32,即32位占4字節。有沒有問題???好,沒有問題我們繼續!

  地址總線寬度為8,可以表示多少個地址呢?2^8=256個,這么多地址那么所占內存為256 * 1(所占字節)= 256Byte;對不對?好,繼續;

  地址總線寬度為20,可以表示多少地址呢?2^20=65536個,這么多地址所占內存為65536 * 2(所占字節) = 2M;  地址總線寬度為32,可以表示多少地址呢?2^32=4294967296個,這么多地址所占內存為65536 * 4(所占字節) = 16G; 

  
  有沒有問題?好,我們看下官方的數據;

    Intel公司早期的CPU產品的地址總線和地址寄存器的寬度為20位,即CPU的尋址能力為2^20=1024*1024字節=1024K字節=1M字節;286的地址總線和地址寄存器的寬度為24位,CPU的尋址能力為2^24=1024*4*1024*4B=4*1024*4KB=16M;386及386以上的地址總線和地址寄存器的寬度為32位,CPU的尋址能力為2^32=4096M字節=4G字節。

  是不是要上天?16G的內存!!!

  

  哪里的問題?

  接下來,我們來找找誤區。

 誤區診斷

  來看看開頭基本概念這里【內存地址只是一個編號,代表一個內存空間】。什么意思?

  我們這塊內存空間存儲的是什么?是這個編號嗎?

  顯然不是,而是這個編號代表這塊空間,這款空間會隨編號的位數改變嗎?變成2個字節,4個字節?大錯特錯!一個內存地址所代表的永遠是1個字節,內存的每一個字節都有為一個個編號,16位,32位只是這個編號的長短,不會影響內存的最小單元大小,僅僅是個編號。唯一影響的是所能表示的個數。

  所以這個16位的cpu,所有表示的地址個數是2^20 = 1048576個,一個地址所指大小1個字節 ,也就是1M;

  32位的cpu,所有表示的地址個數是2^32 = 4294967296個,一個地址所指大小1個字節 ,也就是4G;

 

總結

  內存地址只是一個編號,代表一個內存空間;

  內存地址所執行的內存單元大小就是1字節,跟內存地址位數無關;

  內存空間大小就是尋址能力,即能訪問到多少個地址

 


免責聲明!

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



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