假如,你為執行windows 2000 的老式奔騰pc編寫了乙個很好用的c++程式,而管理人員決定使用不同作業系統(如mac os x 或者 linux)和處理器(如sparc處理器)的計算機替換它。該程式**是否可以在新平台上執行呢?當然,必須使用為新平台設計的c++編譯器對程式重新編譯後再執行。如果在不修改**的情況下,重新編譯程式後,程式執行良好,則說明程式是可移植的。否則反之。
程式語言的可移植性,是指用一種程式語言在乙個系統上編寫的程式經過很少改動或者不需要修改就可以在其他系統平台上執行。
1. 什麼是程式?
首先,我們得知道程式的本質是什麼?程式的本質就是一連串能被cpu識別並執行的有0、1**組成的指令即目標**(由0、1組成的**)。不同型別的cpu指令集是不同的,相同的一段0、1**intel cpu能識別,arm cpu就不能識別產生錯誤。
其次,我們得知道程式的執行原理是什麼?大家都知道程式是執行在作業系統之上的,而大家可能不知道的是:程式要想在作業系統上執行就需要在程式的頭部嵌入一段啟動**,此**相當於程式和作業系統之間的介面。到這裡我們可以清楚的知道:程式 = 目標** + 啟動**,兩者缺一不可,只有這樣程式才能在系統上執行起來。
不同的作業系統,它們的啟動**介面是不同的。例如,在intel cpu上執行的xp和linux的啟動**介面是不同的,所以同一種程式它們的啟動**可能是不同的。但是因為都是intel cpu,所以程式的目標**(0、1**)是相同的。
什麼是程式呢?程式 = 目標** + 啟動**
2. 什麼是系統平台?
這裡的系統平台是指cpu + 作業系統的組合:如intel cpu + windows xp、intel cpu + mac os x、intel cpu + linux 這是三個不同的系統平台,arm cpu + linux 與 intel cpu + linux 也是不同的系統平台。
為什麼系統平台是cpu + 作業系統的組合呢?我們從上面了解到 程式 = 目標** + 啟動**。目標**隨著cpu型別的不同而不同,啟動**隨著作業系統的不同而不同。因此,系統平台是cpu + 作業系統。
3. 可移植性的本質
那麼目標**和啟動**是怎麼生成的呢?答案是編譯器。程式語言編寫的程式首先要被編譯器編譯成目標**(0、1**),然後在目標**的前面插入啟動**,最終生成了乙個完整的程式。所以程式語言的可移植性依賴於它們的編譯器是否強大,是否在多個平台上都有這種程式語言的編譯器。例如,c編譯器在大約40種系統上可用,包括從8位微處理器的計算機到cray超級計算機。
要需要注意的是,程式中為訪問特定裝置(如顯示器等)或者作業系統(如windows xp 的api)的特殊功能而專門編寫的部分通常是不能移植的。
綜上所述,乙個程式語言的可移植性強不強取決於:1.不同平台編譯器的數量;2.對特殊硬體或作業系統的依賴性。
為了便於理解,附加一張可執行**的生成邏輯圖:
順序 選擇 迴圈 總結
如何理解程式語言的可移植性
程式語言的可移植性意味著,用一種程式語言在乙個系統上編寫的程式經過很少改動或者不經修改就可以在其他系統平台上執行。什麼是程式 首先,我們得知道程式的本質是什麼?程式的本質就是一連串能被cpu識別並執行的有0 1 組成的指令即目標 0 1組成的 不同型別的cpu指令集是不同的,相同的一段0 1 int...
CppUnit的可移植性
因為假期要打工要使用bcb來做東西,所以在bcb6 sp4下試一下cppunit,結果發現1.8.0對vc的支援比較好,但是在bcb下不能直接編譯。而1.10.2就可以直接在bcb下編譯通過,我將所有cppunit目錄下的檔案都加入乙個lib工程,直接編譯成lib然後平時使用時,在工程中加入標頭檔案...
程式的可移植性
程式語言的可移植性意味著,用一種程式語言在乙個系統上編寫的程式經過很少改動或者不經修改就可以在其他系統平台上執行。什麼是程式 首先,我們得知道程式的本質是什麼?程式的本質就是一連串能被cpu識別並執行的有0 1 組成的指令即目標 0 1組成的 不同型別的cpu指令集是不同的,相同的一段0 1 int...