CPU寄存器到底有多大?《深入理解計算機系統》說大概有幾百位元組,可是彙編課上卻說理論上有64kb
盡量說得詳細些,還有cache大概是CPU寄存器大小的多少倍。
不同型號的CPU寄存器的個數差別很大,理論上說越新的CPU寄存器會越多。你看的《深入理解計算機系統》書可能比較老,實際情況比那個要多。
至於你說的64KB,應該是指定址空間。
然後一條條詳細回答你的問題。
先說寄存器個數,現在Intel的最新一代CPU里大概有上百個寄存器,扣除重複使用的相同空間的寄存器,寄存器的大小大概是2KB多,具體的寄存器如下圖:
圖片來自:x86
Intel手冊里沒給詳細的圖,所以不確定broadwell里是否有新加的寄存器。
這一坨寄存器里,最大的就是AVX/AVX2寄存器,但這個是用來做特殊計算的。通用寄存器則非常少,64位下通用寄存器也就是R0~R15,其餘的寄存器大部分也用不上。
你說的64KB應該是定址範圍,在16位環境里定址範圍是這個數,但現在都是64位時代了,你這個數有點老。
cache的大小跟寄存器個數沒太大關係。
L1 cache大小是有上限的,超過一定的值會導致性能下降,所以一般CPU就看L2/L3 cache就夠了,新一代的i7 CPU cache的圖如下:
幾百位元組也對, 64kb也對.
64kb對應的是你用的單片機的地址位數. 你用的單片機是16位地址, 16位能尋到的地址一共只有2^16 = 64 * 2^10 bit = 64kb.
計算機是32位/64位定址, 至於理論上能尋多大題主請自行計算一下.
另, Cache一般也是分級的; L1 Cache是寄存器的兩倍到四倍左右; 一般L2比L1大四倍, L3比L2大至少八倍.
比如i7-64位定址; L1 Cache 32KB (注意是Kilo-Byte, 也就是32*8 K-bit); L2 Cache是128KB; L3Cache是2MB per Core (每個核心2MB)寄存器寬度如果是32bits,那就是4Byte。
如果有32個,那大小就是4*32=128Byte。
不同處理器值不一樣,可以算一下推薦閱讀:
TAG:中央處理器CPU | 寄存器 | 深入理解計算機系統書籍 |