C++程序的執行過程包括:
.cpp
預處理.i、編譯.s、彙編.o、鏈接(可執行文件)、加載(內存)、程序執行(cpu)。
預處理:將頭內容文件插入當前文件,展開宏,刪除註釋
編譯:將c++源代碼 翻譯成 彙編語言
彙編:將彙編語言-》二進制機器碼
鏈接:將不同文件整合成一個可執行文件,符號解析,地址分配,重定位,鏈接靜態動態庫,生成可執行文件;
靜態鏈接:複製庫代碼:把需要的庫函數代碼複製到可執行文件中;生成獨立的可執行文件,不依賴外部庫文件
動態鏈接:不復制代碼:只在可執行文件中記錄需要哪個動態庫;
運行時加載:程序啓動時由動態鏈接器加載所需的庫;
重定位:
地址解析:找到所有未確定地址的實際位置
代碼修正:把佔位符地址替換為實際地址
符號綁定:將符號引用連接到符號定義
例:
cpp
// file1.cpp
int global = 100;
// file2.cpp
extern int global;
int main() {
return global; // 需要重定位:global的實際地址
}
C++將程序編譯成彙編語言最終編譯成成機器命令碼,cpu直接執行機器碼,因此高效;
優點是執行起來快,缺點是對環境有依賴;
換個操作系統/CPU架構/字長/庫版本,就需要重新編譯;
因為:
不同操作系統上,系統調用API不同,彙編語言不兼容,彙編語言格式不同操作系統是不同的,目標文件格式不同,因此需要重新編譯;
2、JAVA
java語言執行過程:
java源代碼-字節碼-JVM加載- 解釋執行 + JIT編譯 - 優化的機器碼
Java語言首先將程序翻譯成字節碼,之後程序去執行字節碼,執行過程中再由翻譯器將字節碼翻譯成機器碼去執行,因此執行過程較慢,但好處是換個環境也能執行,不依賴環境
python語言是換個環境
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。