你用的32位還是64位?有什麼區別呢?

龍躍十二發表於2020-12-07

本文已經收錄至我的GitHub,歡迎大家踴躍star 和 issues。

https://github.com/midou-tech/articles

通過前面兩篇文章的學習,外甥對電腦的產生了各種好奇,差點把自己電腦拆開來研究研究了

我覺得這種學習精神挺好的,假使她真的把電腦拆壞了,也是贊同的,畢竟這種學習的經歷是在的

就在前幾天外甥和我抱怨說只要應用開啟的比較多或者網頁開啟比較多,電腦執行超級慢,卡頓半天

我就反手問了一句,你知道為什麼麼?

她故作無知冷冷的來了一句 不知道

我細細的講起卡頓有幾方面的原因:

  • 開啟的app或者網頁需要計算的資料量太大,計算機算力不足,此時計算機算力全部被徵用了,無法在操作其他
  • 開啟的app記憶體需求量大,開啟app多或者單個app記憶體需求較大,會導致記憶體被佔滿,此時會發生磁碟記憶體的交換,磁碟速度很慢
  • app需要讀取大量磁碟資料,磁碟讀寫速度遠遠低於記憶體和CPU
  • 網路卡頓,app有網路互動情況,網路非常慢,app會經歷超時重試

巴拉巴拉說了一通,她估計實在忍不住了,打斷說

我看了工作管理員,卡頓時記憶體爆滿 100%狀態,然後就加裝了記憶體條,詭異的是情況並沒有好轉,讓我非常不解。

問號?
問號?

我聽到這裡,就已經知道病症在那裡了,32bit和64bit的問題,今天就給大家講講這個病症

文章大綱
文章大綱

32bit和64bit指的是什麼?

記得校招面試那會兒,經常被面試官問到,你知道32位和64位的區別是什麼麼?

那時候我脫口而出 定址能力不一樣

現在看來,這個回答含糊不清、對也不對

首先,我們應該問清楚 32位和64位指的是軟體呢?還是CPU呢?

就像上面外甥的描述,她加裝了一個4G記憶體條,她的本原生有4G記憶體 共計8G記憶體,為何原來的記憶體問題還是復現呢?

這裡有兩個可能的原因:

  1. 她的作業系統軟體是32位,但是CPU是64位的,這樣一來的話,即使加裝了記憶體也無法使用。

雖然你有能力了,但是被限制了發揮空間,也就廢物一個了,此時她裝一個64位的作業系統即可發揮8G記憶體的威力了。

  1. 32位的CPU,這樣一來的話,記憶體加裝到8G了,也無濟於事,定址能力跟不上。

上面兩種情況,第一種是有能力,但被限制了,只要放開我,就還你一片天地;第二種是無能為力

所以當在聊32位和64位的問題時,要優先搞清楚說的是什麼?

從上面的內容很容易看出來,所指物件不同,結果完全不同的,不可一概而論

32bit和64bit的區別

明白了32位和64位指代物件,現在來談談二者的區別,談之前先溫習下前面說的馮諾依曼結構

結構五件套就不說了,前面有文章專門介紹了 計算機如何組成的?

  • 輸入裝置

  • 輸出裝置

  • 儲存器

  • 中央處理器

  • 控制器

說說五件套之間如何有效通訊的

CPU 和記憶體以及其他裝置之間,需要通訊,因此我們用一種特殊的裝置進行控制,就是匯流排

匯流排分成 3 種:

  • 地址匯流排,專門用來指定 CPU 將要操作的記憶體地址
  • 資料匯流排,用來讀寫記憶體中的資料
  • 控制匯流排,用來傳送和接收關鍵訊號,比如中斷訊號,還有裝置復位、就緒等訊號,都是通過控制匯流排傳輸。CPU 需要對這些訊號進行響應,這也需要控制匯流排。

當然,這和我們要說的32位和64位有什麼關係呢?

32位和64位軟體的區別

32位軟體和64位軟體的區別就是,指標的大小不同,也就是地址範圍不同

估計一臉黑人問號,現在高階語言都不在使用指標這個概念了,龍叔還在說 指標 是不是不合時宜了

是的,高階語言除了C++還在談指標,其他的語言如java、Python、go都已經不談指標了

語言設計者不談是為了給開發者減負,並不意味著就是沒有了

指標非常核心,因為我們 訪問記憶體資料必須依賴地址,指標就是地址

拉回來了,繼續說32位軟體和64位軟體問題

軟體設計者在設計軟體時是32位的,意味著程式裡面使用的指標都是4byte的,也就意味著最大能尋到的地址2^32次方,也就是4G。

所以當我們作業系統是32位時,最大隻能訪問到4G記憶體,不管我們加多大的記憶體條 都是無意義的

宣告一下 作業系統也是一種軟體 ,不過是一種系統軟體

使用者軟體是依賴作業系統的定址操作的,如果作業系統是32位,該作業系統下無法執行64位的使用者軟體

我們都知道,資料傳遞是通過高低電壓控制的,高電平是1 低電平是0

龍叔在大學學習數位電路時經常搞這種操作,動不動就是用電路連線一個加法器

四位全加器實驗
四位全加器實驗

經常做實驗就是搞幾個晶片 通過電路去控制做一個加法器或者去在顯示器上按照規則亮滅相應的二極體

說實話,大一讓我搞這些 還是比較頭疼的,動不動幾個小時還沒搞個所以然,現在看來不過爾爾

所以現在每當遇到困難時,我都假設自己處在未來某個時間點 來看當下的問題 最終就是不過爾爾

其實本質就是使用電平的高低變化去傳輸資料,一個高電平表示 1 低電平表示 0

假設我們只有一條地址線,一次傳輸只能是一個電平0或1,那你要傳輸一個數字10(二進位制)就必須傳輸兩次

這種只有一條地址匯流排進行資料傳輸的方式稱為序列傳輸

假設我們有兩條地址匯流排,一次就能傳輸兩個電平,數字10就只需要傳輸一次就好

這種用多條地址匯流排,一次傳輸多個訊號的方式就是並行傳輸

當 CPU 需要讀寫記憶體的時候,先要通過地址匯流排來指定記憶體地址,再通過資料匯流排來傳輸資料

所以我們地址匯流排的根數決定定址的能力,當我們有32根地址匯流排時我們的定址能力就是2^32=4G

32位CPU和64位CPU的區別

舉個例子:用一個32位的CPU求和兩個64位的數字

通常 32 位寬 CPU 最多操作 32 位寬的地址匯流排和資料匯流排

64 位寬 CPU 最多操作 64 位寬的地址匯流排和資料匯流排

這就存在一個問題,64位數字無法進行一次性傳輸到32位上讓CPU進行計算

由上面的傳輸原則可知 必須把64位數字拆分為兩個32數字進行傳輸

通過這個例子可以很明白的看到,32位的CPU和64位的CPU在控制匯流排上的能力不同

32位CPU和64位CPU的區別之一就是,CPU 的位寬決定能控制的匯流排根數,而匯流排的根數決定定址能力

32位最大控制的匯流排為32根,最大定址能力是4G,一次能傳輸最大位元組數是4byte

64位最大控制的匯流排為64根,最大定址能力是256TB,一次能傳輸的最大位元組數是8byte

還可以看到的是,32位的CPU計算能力也是隻能計算32位的資料,無法對64位的資料進行運算

這點可能不是很好理解,32位CPU一次讀入只能讀取32bit的資料,同時32位的CPU只有32位的暫存器

64位具有向下相容特性,64位可以跑32位的軟體,可以進行32位的計算

說到這裡,再回想面試官問的問題,以及外甥女的不解 猶如明鏡一般清澈無比

64的優勢是什麼?

接下來說說64位的優勢到底是個啥

我們的CPU執行程式的步驟是:

  1. CPU讀取PC指標指向的指令,簡稱取指(fetch)
  2. CPU 分析指令暫存器中的指令,確定指令的型別和引數,簡稱 解碼(decode)
  3. 如果是計算型別的指令,那麼就交給邏輯運算單元計算;如果是儲存型別的指令,那麼由控制單元執行 ,簡稱執行(execute)
  4. 將執行結果進行返回給暫存器或者將暫存器資料存入記憶體,簡稱 儲存(store)
  5. PC 指標自增,並準備獲取下一條指令

上面步驟是一個迴圈也稱為CPU指令週期,CPU 的工作就是一個週期接著一個週期,周而復始。

指令週期
指令週期

在CPU執行的週期中可以看到,有一個核心的部件 暫存器

上面用到了 程式暫存器 指令暫存器,暫存器本質就是指標,指標就是地址,地址就是一串數字編碼

而決定這串數字編碼的就是地址的大小,地址的大小由定址能力決定,定址能力就是匯流排的根數

匯流排的根數是由CPU的位數決定的

說到這裡其實大家應該已經明白64位CPU的優勢了,龍叔還是給個總結

64 位 CPU 可以執行更大數字的運算,具體多大呢? 2^64這麼大

這個優勢在普通應用上不明顯,但是對於數值計算較多的應用就非常明顯

64 位 CPU 可以定址更大的記憶體空間

如果 32 位/64 位說的是程式,那麼說的是指令是 64 位還是 32 位的

32 位指令在 64 位機器上執行,困難不大,可以相容。 如果是 64 位指令,在 32 位機器上執行就困難了

32 位指令在 64 位機器執行的時候,需要的是一套相容機制就OK了,但是 64 位指令在 32 位機器上執行,32 位的暫存器都存不下指令的引數。

作業系統也是一種程式,如果是 64 位作業系統,也就是作業系統中程式的指令都是 64 位指令,因此不能安裝在 32 位機器上。

補充內容

前面提到了暫存器,很多人對暫存器非常陌生,這裡詳細講解一下

CPU內部結構圖
CPU內部結構圖

從上面的圖中可以很明顯的看到,圖中虛線以內,暫存器是CPU內部整合的記憶體是外部的

當我們訪問記憶體時需要通過暫存器去找到對應的地址,再執行相應的指令

此時CPU會在資料匯流排上生成讀取寫入記憶體的時鐘訊號,最後記憶體的內容會被CPU暫存器的內容更新或者讀入

暫存器是啥,上面已經說了,暫存器就是一個指標,裡面存放著地址

以上就是本期的所有內容了,我是龍叔,我們下期見

最後非常需要靚仔靚女們的分享、轉發、點贊,這些都是我創作的動力,感謝大家

相關文章