32/64位处理器、操作系统、应用程序和库之间有什么关系?
先說結(jié)論:
32位程序和64位程序本質(zhì)上的區(qū)別,是兩者在CPU上運行的指令不同。
文章目錄
- 32位CPU處理器與64位CPU處理器的不同?
- 什么是64位系統(tǒng)?什么是32位系統(tǒng)?
- 32位系統(tǒng)與64位系統(tǒng)的不同?
- 什么是64位應(yīng)用程序?什么是32位應(yīng)用程序?
- 32位應(yīng)用程序與64位應(yīng)用程序的不同?
- 什么是64位庫?什么是32位庫?
- 32位庫與64位庫的不同?
- 64位系統(tǒng)能運行32位庫嗎?32位系統(tǒng)能運行64位庫嗎?
- 64位庫兼容32位系統(tǒng),32位庫兼容64位系統(tǒng)。
由于是和CPU處理器相關(guān),因此我們從CPU開始說起。
什么是64位?什么是32位? #### 什么是64位CPU處理器?什么是32位CPU處理器?
32位處理器是指cpu處理器一次能處理32個0和1 64位處理器是指cpu處理器一次能處理64個0和1 通俗一點說:
32位,就相當于你擁有32個工人,每次能完成32個工人的工作量 64位,就相當于你擁有64個工人,每次能完成64個工人的工作量 總結(jié):
由32位系統(tǒng)過渡到64位系統(tǒng),CPU處理數(shù)據(jù)能力提升了一倍。
之所以叫做“64位處理器”,是因為電腦內(nèi)部都是實行2進制運算,處理器(CPU)一次處理數(shù)據(jù)的能力也是2的倍數(shù)。8位處理器、16位處理器、32位處理器和64位處理器,其計數(shù)都是2的倍數(shù)。一次處理的數(shù)據(jù)越大,該電腦處理信息的能力越來越大;因此64位處理在先天就比32位處理器具有快速的能力。那為什么不用更高級的128位處理器呢?因為位數(shù)越高,處理器芯片的設(shè)計也就越復(fù)雜,目前的技術(shù)水平暫時無法制造這么復(fù)雜的芯片。
思考: 32位處理器能裝64位系統(tǒng)嗎(裝上64位系統(tǒng)是否一定可以運行64位軟件)?
現(xiàn)在對于主流的處理器,64位的CPU是能夠兼容32位指令架構(gòu)的。雖然理論上可以(只要重寫32位處理器對應(yīng)的編譯器,使之支持64位系統(tǒng)),但是軟件基本上是不會向下兼容,因此現(xiàn)實是不會實現(xiàn)。
32位CPU處理器與64位CPU處理器的不同?
這兩者的指令集合、操作數(shù)位數(shù)、寄存器名稱和個數(shù)等等都不相同。
1.從指令集合上:
比如一條mov eax,1指令,可能在32bCPU上對應(yīng)的機器指令是0x1201;在64位機器上就是0x123401。
2.從處理速度上:
64位CPU的數(shù)據(jù)寬度為64位,64位指令集可以運行64位數(shù)據(jù)指令,也就是說處理器一次可提取64位數(shù)據(jù)(只要兩個指令,一次提取8個字節(jié)的數(shù)據(jù)),比32位(需要四個指令,一次提取4個字節(jié)的數(shù)據(jù))提高了一倍,理論上性能會相應(yīng)提升1倍。
3.從寄存器數(shù)量上:
64位CPU里的寄存器數(shù)量也多于32位CPU。32位系統(tǒng)里寄存器個數(shù)為8個,函數(shù)的形參都是存儲在棧里面(內(nèi)存),且函數(shù)內(nèi)的局部變量如果太多的話也會存入棧中。而64位系統(tǒng)含有16個寄存器,比32位系統(tǒng)多了8個,它的函數(shù)形參是放在寄存器中,形參個數(shù)超過6個則放在棧中,而寄存器的訪問速度比內(nèi)存要快,所以從函數(shù)形參的存儲可以的知64位要比32位要快。
4.從操作位數(shù)上:
32位CPU的地址總線不一定是32位的,還有可能是48位的,同樣64位的CPU地址總線也不一定是64位,往往都是48位。
5.從尋址能力上:
內(nèi)存中一個地址占用8bit,即一個字節(jié),32位cpu含有32根地址線,尋址能力為2的32次方個字節(jié),相當于4G內(nèi)存(所以,如果我們裝32位系統(tǒng),安裝8G內(nèi)存實際上是沒有用的)。而64位cpu理論上尋址能力為2的64次方個字節(jié),但目前硬件還達不到這個水準,當然也用不了這么大的內(nèi)存。
64位CPU有更大的尋址能力。
什么是64位系統(tǒng)?什么是32位系統(tǒng)?
32位系統(tǒng)與64位系統(tǒng)的不同?
32位的操作系統(tǒng)是專門為32位CPU設(shè)計的,同樣64位的操作系統(tǒng)是為64位的CPU設(shè)計的。
前面也說了,64位的CPU能夠兼容32位指令架構(gòu),因此在64位CPU上也可以安裝32位操作系統(tǒng)。
32位系統(tǒng)理論上最大只能使用4G的物理內(nèi)存(受地址總線影響,對應(yīng)2^32 )64位的win系統(tǒng),理論上尋址范圍能夠達到2^64,因此64位的系統(tǒng)擁有更高的性能,能夠使用更大的內(nèi)存,能夠更快的處理數(shù)據(jù)。
什么是64位應(yīng)用程序?什么是32位應(yīng)用程序?
32位應(yīng)用程序與64位應(yīng)用程序的不同?
32位的程序就是將源碼用32位的編譯器編譯的,64位的程序就是將源碼用64位的編譯器編譯的。
應(yīng)用程序只接觸邏輯地址,并不接觸真實的物理地址。
32位的程序理論上可以申請利用4GB的地址空間,64位的程序則可以申請利用大于4GB 的地址空間,這也是64位程序的一個巨大優(yōu)勢。
什么是64位庫?什么是32位庫?
32位庫與64位庫的不同?
我們知道應(yīng)用程序的運行是需要操作系統(tǒng)作為支撐的,這些程序在運行時常常需要進行一些系統(tǒng)調(diào)用,還有各種庫函數(shù)等。
這些可執(zhí)行文件能否順利運行有著兩個最重要的地方。 1)動態(tài)鏈接庫。 2)系統(tǒng)API。
64位的系統(tǒng)往往具有32位系統(tǒng)的庫,因此在64位系統(tǒng)上能夠運行32位的程序,但是反過來就不行了,因為32位系統(tǒng)一般沒有64位系統(tǒng)的庫。
64位系統(tǒng)能運行32位庫嗎?32位系統(tǒng)能運行64位庫嗎?
64位庫兼容32位系統(tǒng),32位庫兼容64位系統(tǒng)。
首先,操作系統(tǒng)內(nèi)核肯定是分體系結(jié)構(gòu)的,如x86_64、ppc64、aarch64等,不同的體系結(jié)構(gòu)肯定是要編譯出針對性的內(nèi)核來運行(兼容的除外)。上層軟件分為體系結(jié)構(gòu)相關(guān)和體系結(jié)構(gòu)不相關(guān),如果是體系結(jié)構(gòu)相關(guān)的也要分不同的體系結(jié)構(gòu)分開編譯,如果是體系結(jié)構(gòu)不相關(guān)的則可以一次編譯處處運行。
不同的程序運行平臺上對不同數(shù)據(jù)類型分配的字節(jié)數(shù)是不同的。 個人對平臺的理解是CPU+OS+Compiler。
64位系統(tǒng)兼容32位庫(向下兼容),32位的系統(tǒng)理論上可以兼容64位庫(前提是對老的編譯器進行優(yōu)化,一般軟硬件的設(shè)計思想都是向后兼容,即新產(chǎn)品兼容老產(chǎn)品,但是基本沒有讓老產(chǎn)品兼容以后的新產(chǎn)品這樣的做法)
CPU(32/64位處理器)屬于硬件上的概念,它具體一次性處理多少位的數(shù)據(jù)是由編譯器決定的。
總結(jié): 32位處理器不能裝64位系統(tǒng),64位處理器可以運行32位系統(tǒng)。
64位系統(tǒng)可以兼容32位軟件,32位系統(tǒng)基本不能使用64位軟件。(體系結(jié)構(gòu)不相關(guān)除外)
總結(jié)
以上是生活随笔為你收集整理的32/64位处理器、操作系统、应用程序和库之间有什么关系?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于stm32的温湿度检测案例串口通信屏
- 下一篇: 如何进行竞品调研