淺談從原始碼檔案到二進位制可執行檔案的過程
=== .c ===
預處理 -》.c (原始檔)
編譯-》.s/asm (彙編程式)
彙編-》.o/obj 目標程式(二進位制檔案)
連結-》.exe可執行程式 (二進位制檔案)
(1) 為什麼要生成彙編,而不是直接從原始檔編譯成機器指令(二進位制程式碼)?
首先,組合語言作為機器指令的助記符,除錯以及優化起來都會比較方便;
其次,彙編到機器指令的過程是由硬體完成的,是一個自動過程,讓硬體來完成效率較高;
最後,如果要將原始檔直接轉換成機器指令,那麼編譯器編寫者就必須要非常數量機器碼,這是一個比較困難且低效的過程。
(2) 詳細解釋從原始檔經過編譯成為組合語言的過程?
詞法分析(Token),語法分析(syntax tree),語義分析,優化,程式碼生成。
=== .java ===
java編譯器將原始檔編譯成.class檔案(平臺無關)
JVM的Class Loader負責將class檔案載入到JVM中
利用Windows/Linux下的位元組碼解釋程式,將class檔案解釋成機器指令(機器指令是CPU能直接識別並執行的指令,它的表現形式是二進位制編碼。機器指令通常由操作碼和運算元兩部分組成)。沒有轉換成組合語言的過程
(1) 為什麼引入class檔案?
class檔案徑打破了C或者C++等語言所遵循的傳統,使用這些傳統語言寫的程式通常首先被編譯,然後被連結成單獨的、專門支援特定硬體平臺和作業系統的二進位制檔案。通常情況下,一個平臺上的二進位制可執行檔案不能在其他平臺上工作。而Java class檔案是可以執行在任何支援java虛擬機器的硬體平臺和作業系統上的二進位制檔案。
相關文章
- 6.3建立自己執行的二進位制檔案
- 程式碼(CODE)到二進位制(BIN)檔案的編譯過程補充formelf工具編譯ORM
- 通過Nvidia簽名的二進位制檔案執行系統命令
- 從原始檔到可執行檔案:原始檔的預處理、編譯、彙編、連結編譯
- MySQL二進位制檔案(binlog)MySql
- 文盤Rust -- 如何把配置檔案打包到二進位制檔案裡Rust
- C++ 讀取二進位制檔案到char*C++
- 有幾種工具可以將 PHP 指令碼編譯成二進位制可執行檔案EXEPHP指令碼編譯
- 二進位制檔案視覺化(二)視覺化
- Git處理二進位制檔案Git
- 檔案操作(二進位制拷貝)
- flutter-讀寫二進位制檔案到裝置Flutter
- 淺談iOS中圖片解壓縮從檔案渲染到螢幕的過程iOS
- 介面返回二進位制檔案的下載。
- 二進位制檔案記憶體對映記憶體
- 二進位制檔案安裝安裝etcd
- C語言實現檔案複製功能(包括文字檔案和二進位制檔案)C語言
- 判斷檔案為文字檔案還是二進位制檔案(C語言實現)C語言
- 教你如何將二進位制檔案匯入到資料庫資料庫
- 如何將日誌檔案和二進位制檔案快速匯入HDFS?
- 二進位制檔案和符號檔案(PDB)如何校驗是否匹配符號
- 透過禁止比較讓 Go 二進位制檔案變小Go
- mysqlbinlog 處理二進位制日誌檔案的工具MySql
- 檢視寶塔mysql二進位制檔案 mysqlbinlogMySql
- 【Linux】檢視二進位制檔案內容_hexdumpLinux
- golang: 給二進位制檔案增加版本資訊Golang
- Vue原始碼閱讀 – 檔案結構與執行機制Vue原始碼
- Vue原始碼閱讀 - 檔案結構與執行機制Vue原始碼
- 淺談hosts檔案
- 一個 java 檔案的執行過程詳解Java
- 根據介面返回的二進位制流匯出檔案
- JS下載後臺介面返回的二進位制檔案JS
- od 轉儲 二進位制檔案常用命令
- 前端怎麼處理二進位制檔案下載前端
- 深入wepy原始碼:wpy檔案編譯過程原始碼編譯
- 從普通二維碼到檔案生成二維碼的轉變
- 使用 JavaScript 上傳 PDF 和 Excel 等二進位制檔案到 ABAP 伺服器並進行解析JavaScriptExcel伺服器
- 如何正確地把伺服器端返回的檔案二進位制流寫入到本地儲存成檔案伺服器
- 將Python指令碼打包成可執行檔案Python指令碼