1. 程式人生 > >32位 與 64 位 區別 : CPU 作業系統 應用程式

32位 與 64 位 區別 : CPU 作業系統 應用程式

https://www.cnblogs.com/mlgjb/p/8385658.html   原文連結

1.64位CPU與32位CPU

這兩者的指令集合、運算元位數、暫存器名稱和個數等等都不相同。

一、比如一條mov eax,1指令,可能在32bCPU上對應的機器指令是0x1201;在64位機器上就是0x123401。

二、64位CPU裡的暫存器是64位的,這樣CPU每次處理的資料量也就更大,32位CPU暫存器是32位的。

三、64位CPU裡的暫存器數量也多於32位CPU。

四、32位CPU的地址匯流排不一定是32位的,還有可能是48位的,同樣64位的CPU地址匯流排也不一定是64位,往往都是48位。

五、現在對於主流的處理器,64位的CPU是能夠相容32位指令架構的!!!!!!

 

2.32位的作業系統與64位的作業系統

32位的作業系統是專門為32位CPU設計的,同樣64位的作業系統是為64位的CPU設計的。

前面也說了,64位的CPU能夠相容32位指令架構,因此在64位CPU上也可以安裝32位作業系統。

 

32位的win7可以支援4G的邏輯地址空間,但其中使用者能夠分到的只有大約是3G多,還有一部分是分給系統核心了,64位的win系統,理論上定址範圍能夠達到264。在這裡多說一句,作業系統負責邏輯地址到實體地址的對映,因此32位的作業系統只能利用最大4G的實體記憶體,注意點大家需要注意。

 

 

3.32位應用程式與64位的應用程式

32位的程式就是將原始碼用32位的編譯器編譯的,64位的程式就是將原始碼用64位的編譯器編譯的。

 

應用程式只接觸邏輯地址,並不接觸真實的實體地址。

32位的程式理論上可以申請利用4GB的地址空間,64位的程式則可以申請利用大於4GB 的地址空間,這也是64位程式的一個巨大優勢。

 

我們知道應用程式的執行是需要作業系統作為支撐的,這些程式在執行時常常需要進行一些系統呼叫,還有各種庫函式等。

這些可執行檔案能否順利執行有著兩個最重要的地方。

1)動態連結庫。
2)系統API。

 

對於Windows系統而言,64位的系統往往具有32位系統的庫,因此在64位系統上能夠執行32位的程式,但是反過來就不行了,因為32位系統一般沒有64位系統的庫。

 

32位升級到64位不是簡單的重新編譯釋出一下就可以了。舉個例子,在32位C語言環境裡一個指標可以放入一個int型的變數中,但在64位裡就不行了了,因為64位程式裡的指標為64位,這樣的話程式肯定就爆了,因此對於某些程式如果想要升級到64位,則需要修改原始碼,這個工作是相當繁瑣的。

 

總結

1.32位CPU只能安裝32位的作業系統,而32位作業系統只能執行32位的程式。

2.64位CPU可以執行32位或者64位的作業系統,64位作業系統可以執行32位或64位程式。

3.64位版本的程式佔用的記憶體空間更大,因為它的指標是64位的,但同時它又可以申請更多的邏輯地址空間。