如何簡單易懂地介紹 64 位和 32 位晶元的區別?

iPhone 也用 64 位的 A7 晶元了。個個廠商都說 64 位系統和處理器多牛逼牛逼。但我只知道從 32 位 Windows 升級到64位的區別只有支持更多的內存,絲毫沒有感受到性能的提升。那 64 位究竟是什麼,能簡單易懂介紹嗎?


四車道和八車道的區別,只有你堵成晚高峰的北京才能感受得到。
你要是四車道都沒開滿,上了八車道也感覺不到區別。一般來說跑計算密集型並且為64位優化過的程序才能感受到區別。QQ這種隨便跑哪裡都一樣

========================================================
半吐槽式答案居然得了二十多票,實在於心不忍。那就再給大家講個故事好了。

故事要從一個熊孩子開始講起。我們就叫他三十二郎好了(我真沒看過中國好聲音,從來沒有,至於你信不信,反正我是信了)。

話說這個熊孩子,上幼兒園學了十以內加減法。這十以內加減法可不簡單,要說數學是萬惡的源泉,那這十以內加減法就是每個人踏入苦海的第一步。絕大部分人的數學陰影就是從這裡開始的。

咳,我們還是接著講三十二郎。

既然熊孩子學了加減法,那我自然要考考他。「四加五等於幾啊?」,熊孩子掰手指頭數:「一二三四,一二三四五,一二三四五六七八九,等於九嘛」。好樣的,摸頭,給糖吃。「那六加六等於幾啊?(想像西遊記里孫悟空的奸笑表情)」「一二三四五六,一二三四。。四。。。四。。。。四。。。。。」「不夠了就從頭來嘛」「哦,一二三四五六,一二三四五六,等於二嘛!」
至於為毛會等於二呢,這可是一個歷史悠久的問題,要從民國那時候說起。歷史太悠久咱們就不提了,簡單地說,因為手指不夠數了,我又坑熊孩子讓他從頭開始數。計算機中我們把這種情況叫做「運算溢出」,當然熊孩子不知道這個。

雖然三十二郎計算能力不強,但一般買個小菜算個帳還是可以的。比如買兩塊錢臭豆腐再買兩塊錢榴槤一共多少錢啊這種低級問題都能解決。但遇到買六塊錢臭豆腐再買六塊錢榴槤一共多少錢這種高級問題就沒辦法了。你要是只給老闆兩塊錢,保證老闆把你打成熊孩子。這就到我出馬的時候了。

我會先讓熊孩子算「五塊錢臭豆腐再加五塊錢榴槤一共多少」「十塊」。好,我自己記下這十塊。然後再問,「一塊錢臭豆腐加一塊錢榴槤是多少錢」「兩塊」。好,我們之前記了十塊,後面再填上兩塊,一共十二,事就這麼成了。你要問我為什麼會十以上加減法,因為我不是熊孩子啊。雖然這事超出熊孩子計算能力,但我會把計算簡化,保證每一步都在計算能力內,最終完成我要的目標。這些步驟我們稱之為「演算法」。

你要問我為什麼不自己算賬,

你知道的太多了。

一年又平安的過去了,感謝三十二郎,減輕了我很多的工作負擔。現在熊孩子長大了。我們現在叫他六十四郎好了。既然是進化版,那總要能改變世界才行。我們的六十四郎現在會一百以內加減法了!具體如何運算呢,就像你想的那樣,當然是脫了鞋用腳了!什麼?你用腳只能數到20,哎呀你弱爆了,你那數學是音樂老師教的吧,只能數到7 。當然是用腳當十進位進位了。比如你用手數到10,翹起來一個腳趾,手可以繼續從一開始數嘛。

你要是敢問我怎麼翹起來一個腳趾

你知道的太多了。

好了,現在我們繼續買臭豆腐和榴槤的問題。六塊錢臭豆腐加六塊錢榴槤怎麼算?直接脫了鞋用腳嘛,還要我教什麼,暴力硬上。數到10翹起來一個腳趾,繼續從頭數。雖然比去年的時候多了個拖鞋的步驟,速度上要慢了些。但比要我教他怎麼算,還要算兩次我再搞出結果要快。這就是原生指令的好處啊,原來只能一次爬一步,現在都會跑了。

什麼?你說缺點。恩,由於多了一個拖鞋的步驟,加上需要動腳趾這種複雜的動作,六十四郎消耗比較大,吃的比較多。

好處嘛,自然是算那些十以上的不用我教了,而且比原來算得快。你要是說還算十以內的話,速度取決於究竟脫不脫鞋(誤)。其實都過了一年了嘛,一般來說就算是算十以內的熊孩子也要比去年算得快的。

你要是非跟我犟六十四郎只比三十二郎吃得多,沒見算得快啊。我會給你耐心的講,孩子啊,你下次可以試試多買點臭豆腐嘛。都可以拖鞋上腳了,你每次就買兩塊錢的,用不著我也不會給你退貨哦。至於為啥非要漲,通貨膨脹嘛,反正單價早晚會漲。要不然你開家長會,老師說「哎呀不好意思你家孩子和去年一樣,啥啥都不會教不好了還是回去再念一年吧」你肯定也不願意。

你要是再說

你說的太多了。==半夜賣萌累到吐血的分割線======================================
原來的回答其實比喻不是很貼切,本打算更具體的寫一下,結果寫多了。。花了近一個小時的時間(我絕對不會告訴你大部分時間花在找那張圖和截掉上面的水印上面)以後最多一周寫一個長答案,寫多剁手。
其實無論怎麼講,涉及到計算機原理的部分的比喻都不會很準確。就像你很難用比喻給別人講明白傅里葉變換一樣。有些事你說的越通俗,讓沒有專業背景的人也可以理解,就意味著越不準確。
其實64位帶來的改變不僅僅是一次計算的數據更大那麼簡單,雖然這是最明顯的表現。但是其他那些就更難用簡單的語言來描述清楚。對於大眾接觸到的普通app來說,如果是64位優化過的,那麼會更快,性能更好。如果沒有優化過的,和原來差不多,也許會快點。


其他地方看到的: 有一個巨大的圖書館,裡面有許多藏書,還有一個管理員幫你找書。管理員有32個助理,他們騎著自行車前去取書,然後交給管理員。某天來了一個借書的人,他想要關於恐龍的所有圖書,圖書館有65本相關的書藉,那麼助理們要跑三趟。第一趟取來32本,第二趟也是32本,最後一本還要一個助理跑一趟。不論如何,雖然最後只取一本書,還是要花三趟的時間。

如果圖書館有64位助理,就只需要跑2趟。如此一來就能大大節省時間,但是要注意,時間並不是縮短一半,因為在第二趟時,仍然只是一位助理跑一趟取1本書,雖然還有63位助手閑置,但無法讓時間縮短。

假如圖書館有256本相關的圖書,32位助理要跑8趟,64位就只跑4趟。

iPhone的運行與此相似,它從內存獲得數據,一個時鐘周期內32位只能處理32位的數據,64位就可以取得64位的數據,如此一來速度、性能、效率就提高了。


在某個遙遠的時代,我家開了一個小賣部。因為場地原因呢,內人管庫房,我守著一個櫃檯。由於既沒有電話,也沒有對講機,當顧客到前台需要買東西的時候,我需要想辦法找個人告訴內人從庫房裡把貨提出來。這個重大的使命交給了我家不會說話的弱智熊孩子——三十二郎。

我和內人約定好,讓三十二郎用兩隻手比劃數字。比如左手做「四」的動作,右手做「六」的動作,就代表取出46號貨物。這樣,三十二郎可以表達99種貨物。除此之外,小賣部還需要做些其他的特殊工作,於是我們又約定如果三十二郎左手做「十」的動作,那麼就代表不是要提貨,而是有其他的特殊工作。比如呢,左手做「十」,右手做「一」表示老子要吃飯了!在這之後三十二郎還會再來回一圈,第二次比劃的數字是我要吃的貨物種類。

很顯然,左手做「十」這樣的約定只能完成十個不同的特殊動作,可是我需要內人做的事情種類實在相當多。小賣部後來開的比較大,貨物的種類超過了一百種。為了表達「今天中午我要吃康帥博飛碟炒麵,熱水泡開「這件事,三十二郎不得不來回跑七八趟才能表達清楚意思。小賣部的效率遇到的比較大的障礙。

我們成功訓練了三十二郎學慣用腳趾表達意思。繼續約定左手做」十「表示一個特殊工作,這樣三十二郎可以表達1000種特殊工作,或者指明9999種貨物(不要問我用腳趾怎麼做出」七「!),效率大大提高,三十二郎改名六十四郎了!

我正在考慮給六十四郎灌點秋水仙素把他培養成一百二十八郎。內人拍了我一平底鍋:你也不看看,咱小賣部都多久沒人來了!光傳貨那麼多講究有個P用啊!

===============================================

故事裡的熊孩子大概代表了32位和64位在指令集、定址、匯流排效率的不同。若僅就抽象的計算機架構來說,位數變多,數據傳遞能力自然會增強;但實際上,因為軟體運行有很多外部瓶頸,使得能夠利用到64位優勢的場合變得非常有限;除非軟體經過特殊的對於64位的優化。

感謝@Cascade原創意。借用了」三十二郎「的說法,實在很萌這個名字。


有個傢伙非常較真,那我就貼出圖片吧.

ubuntu14.04 mem total is 8062032 .
8062032/2 =7873.078125........

針對@ Cascade的回答,個人感覺感覺簡單的問題被複雜化了 ,普通人也沒有那麼笨的,不用打比喻直接說原理就行了。。。個人覺得可以這樣說,計算機內部表示的數值是有範圍的,決定性因素在於cup的寄存器 。他是計算機處理數值的最小單元 ,如果寄存器是32位的,那麼他所能表示的數的範圍最大是2的32次方,即表示的範圍是32個0到32個1,(這裡不計較原碼還是補碼或是移碼),如果寄存器是64位的話 ,顯而易見,表示的範圍是64個0到64個1。 數的表示範圍大了,那麼其計算的精確度就提高了。 當然這要操作系統的支持才行,就像有輛跑車能跑300公里每小時,但是駕駛員只會開低檔,好的資源被浪費了。一般來說現在的cpu都是64的,所以都可以裝上64位操作系統。
相信大家都聽說過32位系統只能識別4g內存 而64位系統可以識別4g以上內存。原因是這樣的:內存由很多小的單元組成,為了能取得內存裡面的數據,需要給把每個單元編號,就像家庭住址一樣。而作為內存的單元編號是有專門的寄存器存儲(專業名詞是mar)的,32系統可以表示的最大地址是2的32次方,一般來說一個單元是8位的,也就是一個位元組。合起來就是4g的存儲空間,同樣的64位系統可以表示的單元地址的總數是2的64方,這個數到底是多少,你可以認為大到超過你的認知。
現在又有一個問題產生了,那就是為什麼我的電腦是4g內存,而計算機卻顯示3.xxG。其實由於其他的存儲設備也需要空間地址,所以一部分地址被分給其他的存儲設備了,那麼給內存的地址就減少了,識別的內存自然就小於4g。其實還有一個問題,就是你的內存肯定小於買的時候標註的。譬如你買的4g內存實際是小於4g的,硬碟也是一樣的,這是由於方便工業生產,廠家的標準是1g=1000m 而科學標準是1g=1024m。
再補充一條就是64位寄存器其性能能夠大幅度提高是這樣的:一般一個機器指令是32位的如果寄存器是64位就可以一次取兩個指令,那麼計算機運行速度自然就快了。

暫時只想到這麼多了,希望能給大家點幫助。有錯誤望指出


更換到 64 位操作系統,最直接的一個好處就是可以使用 4GB 以上的內存,至於其他的性能提升,真的不怎麼明顯,尤其是在 Windows 下。

通常我們說的 32 位指的是 IA32(x86-32) 指令集,而 64 位通常是指 AMD64(x86-64) 指令集,後者是對前者的一個擴充,增加了一些(多媒體方面的)新指令,增強了安全機制,增加了幾個寄存器,同時以 64bit 為單位處理數據,也就是說支持 4GB 以上的內存。

但是,多數軟體,尤其是 Windows 下的閉源軟體,為了確保一個安裝包在任何版本的操作系統,任何平台下都可以使用,往往會使用最老的,支持最廣泛的指令集來進行編寫(編譯), 而不會使用 64 位新指令集中的功能。
所以我說除了能使用更多內存之外,不會有太多的性能提升,至少在目前 64 位系統還沒有完全普及的情況下是這樣。

總結:
64 位增加了很多用於提高性能的設計,但是對於個人電腦來講,除了能使用到更多內存之外,不會有多少性能提升。當然,隨著時間的推移,會有更多軟體為 64 位系統提供優化。


--------
才看到樓主還問了 iPhone, 我不太關注蘋果,不知道蘋果具體打算怎麼實施,如果要求所有的應用都是以 64 位指令集編譯的,那麼性能提升是會有不少的。但是移動設備又不能光看性能,還需要考慮續航,發熱等等,需要綜合地來看。


看上去大多數回答包括得贊最多的基本都是胡扯…32位和64位差別最根本的就是地址位數差別好不。早先地址通過alu 計算,所以alu位數最關鍵,但是8位機和16位機通過巧妙使用alu可以定址超過alu位數的空間,一般可以達到20至24位(1M-16M位元組)。32位時代則alu 和定址位數基一致。 但是32位時代CPU 更複雜,地址運算逐漸有專門的部件(agu )完成,而alu則可擴展到64位以上…對軟體特別是操作系統來說統一為32位地址很有好處。 32位(4GB最大平面地址空間)不夠用就出現64位軟硬體--最關鍵是系統提供64位平面地址。實際上很多所謂64硬體只實現48位44位甚至40位物理地址,但操作系統為每個地址數據準備的空間是64位,可以與64位操作系統配合的就是64位處理器了。

實際上32位和64位定址差別巨大,例如32位下使用二級頁表,而64位則至少使用3級頁表和反向頁表等等。32位操作系統及硬體下即使有能力做更大的定址,也需要更多性能代價,而64位系統就可直接定址,未來軟硬體兼容更徹底。

說兩者是2車道和4車道的區別沒啥道理,區別其實是倉庫和堆場大小,32位處理器處理不了太多貨物,而64位處理器可處理的貨物則幾乎可視為無限。

---------------
打一個相對簡單的比方,那cpu應該拿工廠做比方。工廠生產原材料要從倉庫里取用,成品要放回倉庫直至運出。管理良好的倉庫(內存)應該有一排排貨架,貨架上應該有編上號的貨格,這樣根據編號存取貨物就不會出現混亂。
因為倉庫大小有限,同一個貨格,在不同時間會放進不同的東西,所以每個編號存放的是什麼需要一個目錄來管理,這個就是頁表。
32位cpu是從比較小的工廠開始做的,一開始只有一個工人(alu)手工生產,存取物品也要工人自己找。後來工廠擴大有了機器(流水線化),生產效率提高了,再擴大就有多個工人多台機器(超標量多發射),廠主覺得工人自己存取物品比較浪費時間,就請另請了出納(agu)替工人算編號存取物品。
32位時代倉庫一般比較小,工人學歷也不高,只能數到40億,所以就使用32位的編號和目錄卡片(32位定址)。有時候貨物多而倉庫小(幾百萬貨格),所以有時候在堆場里也開闢一個空間,先給物品編號,需要用的時候整批和倉庫里的東西交換(「交換文件」或者說「虛擬內存」),所以不管倉庫是大是小,工人和客戶(應用程序)感覺都是40億格的倉庫可用。

但是工廠繼續擴大,開始接到特別大的單子,材料或產品超過40億格,怎麼辦?那就只能要求客戶把大單子拆成小於40億格的小單子,這讓客戶非常頭疼。也有工廠自己把大單子拆成小單子一部分一部分做的方案,單子的拆分與組合都另外要消耗時間和資源,所以特大單子會做得非常慢。
另外工廠也有財力建造超過40億格的倉庫了。編號和目錄卡片只能40億格咋辦?編號系統另加個編號系統,出納則另外給個小本子記載本次使用哪個編號系統,這樣一切還可以按照40億格倉庫的方式來。

當然這樣客戶肯定很不滿意,所以64位系統勢在必行。64位系統使用64位編號和目錄卡片(64位定址),這樣直接提供相當於40億個40億格倉庫的空間,一段時間內估計沒有任何客戶能用足---實際上也沒有工廠真的實現64位定址,因為要為全部64位空間編址,目錄表自身都要千億計的空間才行,所以64位系統往往為目錄表編目錄表,既多級目錄,可以抽掉下一級的空目錄表節省空間。或者反向頁表,只為用到的空間編目錄表。

所以64位工廠最大的優勢是可以接特大的單子,這種單子是32位工廠不能接下或者很勉強的。但是加工生產則是看工人和流水線,如果32位工廠和64位工廠有同樣的工人和流水線數,工人素質和機器也差不多(其實32位處理器早就開始使用64位alu了,只是對於通常8位(byte)16位(unicode/short int)和32位的數據(int)加減來說,多餘位數無用),那對於小單子兩者速度也不會有很大差別,因為32位工廠運行時候額外消耗還少些,速度也可能更快---這是一些軟硬體廠商對遷移到64位遲疑的原因,升級到64位需要增加運算以外的軟硬體消耗,同樣資源下效率其實會略降的。
不過因為32位發展受限提升到64位幾乎不增加成本,升級64位倉庫同時往往進行其他資源升級,例如64位通用寄存器和指令集升級,對於特定應用還是能有明顯性能提升的----64位處理器運行32位系統和應用則可能沒有這樣的的提升。


友情提醒:

  • 三十二位最多支持三點幾個G內存。
  • 目前一定要用64的情況很少。

理論上的差異:

  • 2^32 = 4 294 967 296
  • 2^64 = 1.844674407371 * 10^19 = (2^32)^2

贊同車道的比方,

  • 然而他們相差何止兩倍,簡直是平方的差異。
  • 四車道對應的應當是十六車道。
  • 本來堵得厲害的搖身一變就暢通無阻了。

——————

PS:當你的3D設計或者大型遊戲(Call of Duty 10或孤島危機3)特效全開爆掉4G內存時64bit的系統就是必不可少的了,嘿嘿。

------------------------

就拿(優酷類)的視頻標準舉例:
你有個能播高清的設備,也只有搭配高清片源才不會白搭。其他時候就沒什麼區別。
480p(標清);720p(高清);1080p(超清)


可以簡單理解為運行32位的處理器的iPhone一次只能處理32比特的信息量,而64位處理器的每次的處理量為64比特。
回到windows來說,一般3g以下內存不適用64位系統,一般覺得64位系統跑起來和32位沒差別是因為用的軟體大多是32位的,要感受性能的提升需要運行64位軟體作對比。


@劉彬 你說內存也是和硬碟一樣, 廠商是以1G=1000m 計算的,, 那這個怎麼解釋?? !!! 我筆記本是 4G內存的,, 若是按照1G=1000m計算, 也該是 3000多m的,, 但實際上是按1024進位的!!! 不信.., 可以看其它的內存也是這樣的!!! 非要我 回答發圖片來打你臉, 你才肯承認!!! 你的簽名說你是 程序員,, 屁!拉低了程序員的水平!!!!!!


非常之不能贊同第一名的回答。除了我們這邊討論的32位或者64位指令外,一般通用CPU還包含了一下向量指令,當處理超過32位長度的數據秘籍計算時候,編譯器一般會使用向量化指令,而不是32位指令或者64指令。當讓類似於for循環中的計數器不會這麼做,但是這樣的地方有多少會用到64的數據類型呢?非常少。。。所以64位處理主要意義在內存定址上(更大內存空間,和可能更高的內存帶寬),而對性能的影響非常少。
發揮i7全部實力!32/64位系統對比測試_CPU評測
類似評測很多,如果在對於內存需求較少的應用情況下,可以看到32位和64位在計算能力上並沒有明顯差別。


首先32位在人類世界中的整數表示範圍滿足大多數需求,串列的邏輯並不一定能體現出64位的優勢。只有專門針對64位用64位指令編譯器的程序重做同樣的功能才能有性能上的提高。但是, 為了向前兼容32位的指令程序,相似的指令序列 必然不會有多大性能的提升。 而且64位的主要用途在於大位數的計算, 比如網路報文分析, 比如浮點數模擬, 並且指針有了更大的表示範圍從而可以通過特定演算法減少虛擬內存到物理內存地址轉換的開銷。


引用36氪的文章http://www.36kr.com/p/206226.html

」我無法相信蘋果把 iOS 7 和所有 app 搞成 64 位的最終目的就是為了生產出 4G+ 的智能手機。我想它肯定有更大的計劃。想一想,有哪種產品逼得蘋果非得同時動用 64 位的 A 系列晶元和 iOS 系統來實現 4GB+ 的存儲?

答案是 Apple TV (我說的是還未出世的 Apple TV,不是現在那款)。」


推薦閱讀:

TAG:中央處理器CPU | 晶元集成電路 | SoC | AppleA7晶元 |