概覽
- 基本概念
- 進入誤區
- 誤區診斷
- 總結
基本概念
- 什么是位?
- 什么是字節?
位表示的是二進制位,一般稱為比特,即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字節,跟內存地址位數無關;
內存空間大小就是尋址能力,即能訪問到多少個地址