歡迎在we chat 上 follow 程序喵大人!
想必大傢都遇到過這樣的問題:安裝某個軟件的時候,出現提示選擇32位版本還是64位版本?我們也可以查看自己的電腦是32位還是64位系統。
Windows
51c9950bf3628cb669b07fc109819e30
Linux
大傢可能知道32位和64位和系統有關,但其實 32 vs 64 可以有多重含義。一般情況下,有以下幾種可能:CPU、程序、操作系統。
今天我來給大傢一一介紹下!
首先,我們要先從什麼是位數講起。
計算機中的位數指的是CPU一次能處理的最大位數。在Intel由16位的286升級到386的時候,為瞭和16位系統兼容,它先推出的是386SX,這種CPU內部預算為32位,外部數據傳輸為16位。直到386DX以後,所有的CPU在內部和外部都是32位的瞭。
有些人往往會弄不清在計算機中出現的“位”和Byte,KB,MB等有何關系,8位等於一字節Byte,即8bit=1B。32位處理器每次最多處理4Byte(32bit),同理,64位處理器每次最多處理 8Byte(64bit) 。
32位架構的CPU數據總線寬度是32位,每次可以傳輸32位數據,可以計算4個字節。64位架構的CPU數據總線寬度是64位,每次可以傳輸64位數據,可以計算8個字節。
數據總線
數據總線是CPU與內存或其它器件之間的數據傳輸的通道,數據總線的寬度決定瞭CPU和外界的數據傳輸速度,每根線可以傳輸1位二進制數據,32根線每次就可以傳輸32位數據,64根線每次就可以傳輸64位數據。除瞭數據總線外還有地址總線和控制總線。
地址總線
CPU通過地址總線來指定存儲單元,地址總線的寬度決定瞭CPU所能訪問的最大內存空間大小,1根地址線能訪問的內存空間是1bit,32根線訪問的最大內存空間是4G,64根線...太大瞭。
控制總線
CPU通過控制總線對外部器件進行控制,主要通過控制總線來傳輸控制信號和時序信號,控制總線是各種信號線的集合,是計算機各部件之間傳送數據、地址和控制信息的公共通道,控制總線的寬度決定瞭CPU對外部器件的控制能力。
總體來說,CPU作為總線的主控,通過控制總線向各個外部器件發送控制信號,通過地址總線訪問內存地址,通過數據總線傳輸數據。
CPU的位數越大,可以計算的數值就越大,64位CPU可以執行更大數字的運算,但這個優勢在普通應用上不太明顯,普通應用也沒必要進行太大數字的運算,但是對於數值計算較多的應用就非常明顯。同時64位CPU有更大的尋址空間。
運算速度不同:64位CPU的通用寄存器數據寬度是64位,處理器依次可以讀取64位數據,比32位多一倍,運算速度理論上會提升一倍。像兩個不同的打工人一樣,打工人A一次性可以搬32塊磚,打工人B一次性可以搬64塊磚,誰搬磚的速度快,自然你更喜歡用誰。由於運算速度提升,64位CPU可以在多任務中運行順暢,來回切換也不會卡頓,王者榮耀都順暢多瞭。
那麼有朋友要問瞭,既然位數越高處理器運算速度越快,為什麼不用128位、256位的CPU?因為位數越高,處理器芯片的設計也就越復雜,當前的科技水平還無法制造這麼復雜的CPU。
2. 程序
指的是32位程序和64位程序。
32位指令的程序一般來說可以在64位機器上運行,可以兼容。64位指令的程序不可以在32位機器上運行,因為32位的寄存器存不下64位的指令。註意其實還有16位的程序,但16位的程序不能運行在64位的機器上,因為沒有提供兼容機制。
3. 操作系統
操作系統其實也是程序,64位的操作系統使用的是64位的指令,不能安裝在32位機器上。
設計初衷不同
64位操作系統的設計初衷是為瞭滿足需要大量內存和復雜浮點數運算的需求,一般用在科學計算、人工智能、平面設計、視頻處理、3D動畫和遊戲數據庫以及各種網絡服務器等領域中。
安裝環境不同
64位操作系統隻能安裝在64位CPU的機器上,同時需要配合64位的程序才能發揮最佳性能,32位操作系統既可以安裝在32位CPU的機器上,也可以安裝在64位CPU的機器上,但沒啥意義,64位的性能會被大打折扣。
尋址能力不同
32位操作系統最多可以尋址2的32次方即4,294,967,296字節,約4GB內存,4GB的內存就現在而言在很多服務端程序上都是不夠用的,而64位操作系統理論上可以尋址2的64次方即18,446,744,073,709,551,616字節超過1億GB內存,但這隻是理論上,由於不同架構的CPU設計不同,所以尋址能力也有錯差別。
32位操作系統和64位操作系統下數據類型對應的字節大小也是不同的,正常數據類型對應的字節數應該是CPU位數決定的,但實際上貌似是由編譯器決定的,看下表:
20世紀和21世紀早期制造的計算機大多都是32位的機器,現如今大多都是64位的機器瞭,但為瞭兼容32位機器,一般編程都會開發出兩個版本,例如打包一個Android SDK,SDK內部一般都會包含32位和64位的動態鏈接庫,iOS的Framework內部也會有32位和64位的靜態鏈接庫。
總結
32位處理器的優點唯一值得一提就是它可以與20世紀末和21世紀初開發的所有舊程序兼容。64位處理器可以提升程序的性能,更好的利用64位操作系統的特性。64位的處理器有256TB的虛擬內存,其中128TB分配給瞭用戶空間,另外128TB分配給瞭內核空間(不同架構的CPU虛擬內存的設計大小不同,AMD的x86-64架構的CPU隻有最低48位才會在地址轉換時被使用,所以總的虛擬地址空間為2的48次方即256TB,這裡涉及到多級頁表中的四級頁表,後續程序喵會介紹)。
要實現真正意義上的64位計算,光有64位的處理器是不行的,還必須得有64位的操作系統以及64位的應用軟件才行,三者缺一不可,缺少其中任何一種要素都是無法實現64位計算的。在64位處理器方面,Intel和AMD兩大處理器廠商都發佈瞭多個系列多種規格的64位處理器;
參考資料