32位程序与64位程序
我們有時候會遇到這樣一種情況:我們在32位操作系統(tǒng)上下載了64位版本的程序,卻發(fā)現(xiàn)無法安裝,大家可能會很困惑。
下面就來簡單解釋一下32位程序與64位程序的具體區(qū)別。
我們首先要弄明白的:
1.這里所說的的32位與64位程序,是指經(jīng)過編譯后的可執(zhí)行文件,例如像Windows上的exe文件,而最初編寫的源碼并沒有32位和64位之說。
2.不是所有的程序需要區(qū)分32位和64位,對于原生語言例如C語言編寫的程序需要區(qū)分64位與32位,但是對于像Java這樣的語言,就不需要這樣了,因為Java編寫的程序是在JVM(Java虛擬機)上運行的,JVM屏蔽了具體的硬件細節(jié)。
3.32位與64位的程序的本質(zhì)區(qū)別在于:兩者最終在處理器上運行的指令是不一樣的。
由于兩者本質(zhì)的區(qū)別在于處理器執(zhí)行指令是不一樣的,因此我們從CPU開始說起。
1.64位CPU與32位CPU
這兩者的指令集合、操作數(shù)位數(shù)、寄存器名稱和個數(shù)等等都不相同。
一、比如一條mov eax,1指令,可能在32bCPU上對應(yīng)的機器指令是0x1201;在64位機器上就是0x123401。
二、64位CPU里的寄存器是64位的,這樣CPU每次處理的數(shù)據(jù)量也就更大,32位CPU寄存器是32位的。
三、64位CPU里的寄存器數(shù)量也多于32位CPU。
四、32位CPU的地址總線不一定是32位的,還有可能是48位的,同樣64位的CPU地址總線也不一定是64位,往往都是48位。
五、現(xiàn)在對于主流的處理器,64位的CPU是能夠兼容32位指令架構(gòu)的!!!!!!
從上面可以看到64位CPU的運算能力理論上比32位CPU強很多。
現(xiàn)在32位的CPU一般是X86架構(gòu)的,從80386開始就是32位的CPU,也對應(yīng)他的32位指令集。
后來發(fā)展出64位CPU,從X86擴展出64位的指令集,一般我們就叫做X64,也叫AMD64架構(gòu),因為最早是AMD推出64位CPU的。
2.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位的win7可以支持4G的邏輯地址空間,但其中用戶能夠分到的只有大約是3G多,還有一部分是分給系統(tǒng)內(nèi)核了,64位的win系統(tǒng),理論上尋址范圍能夠達到264。在這里多說一句,操作系統(tǒng)負責邏輯地址到物理地址的映射,因此32位的操作系統(tǒng)只能利用最大4G的物理內(nèi)存,注意點大家需要注意。
3.32位應(yīng)用程序與64位的應(yīng)用程序
32位的程序就是將源碼用32位的編譯器編譯的,64位的程序就是將源碼用64位的編譯器編譯的。
應(yīng)用程序只接觸邏輯地址,并不接觸真實的物理地址。
32位的程序理論上可以申請利用4GB的地址空間,64位的程序則可以申請利用大于4GB 的地址空間,這也是64位程序的一個巨大優(yōu)勢。
我們知道應(yīng)用程序的運行是需要操作系統(tǒng)作為支撐的,這些程序在運行時常常需要進行一些系統(tǒng)調(diào)用,還有各種庫函數(shù)等。
這些可執(zhí)行文件能否順利運行有著兩個最重要的地方。
1)動態(tài)鏈接庫。
2)系統(tǒng)API。
對于Windows系統(tǒng)而言,64位的系統(tǒng)往往具有32位系統(tǒng)的庫,因此在64位系統(tǒng)上能夠運行32位的程序,但是反過來就不行了,因為32位系統(tǒng)一般沒有64位系統(tǒng)的庫。
32位升級到64位不是簡單的重新編譯發(fā)布一下就可以了。舉個例子,在32位C語言環(huán)境里一個指針可以放入一個int型的變量中,但在64位里就不行了了,因為64位程序里的指針為64位,這樣的話程序肯定就爆了,因此對于某些程序如果想要升級到64位,則需要修改源碼,這個工作是相當繁瑣的。
總結(jié):
1.32位CPU只能安裝32位的操作系統(tǒng),而32位操作系統(tǒng)只能運行32位的程序。
2.64位CPU可以運行32位或者64位的操作系統(tǒng),64位操作系統(tǒng)可以運行32位或64位程序。
3.64位版本的程序占用的內(nèi)存空間更大,因為它的指針是64位的,但同時它又可以申請更多的邏輯地址空間。
4.大家可能會疑問,第一個64位的程序是怎么來的,因為那個時候還沒有64位的編譯器,其實很簡單,32位的編譯器也可以編譯出64位的程序,當然這個問題就沒有必要深究了。
總結(jié)
以上是生活随笔為你收集整理的32位程序与64位程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【go语言学习】VS安装go插件失败的解
- 下一篇: Win11 学院:简单命令让 Windo