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的圖如下:

除了數據/指令cache之外,還有TLB等等,也都是cache,只不過你平時感覺不到它的存在。最後再強調一下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 | 寄存器 | 深入理解計算機系統書籍 |