補充點編譯的基本常識

2021-09-30 04:28:03 字數 997 閱讀 8662

cpu、記憶體和i/o控制晶元,這三個部件就是計算機的核心。

電腦科學領域的任何問題都可以通過增加乙個間接的中間層來解決。

預編譯(prepressing)-->編譯(compilation)-->彙編(assembly)-->鏈結(linking)

預編譯處理包括:

*將所有的"#define"刪除,並且展開所有的巨集定義。

*處理所有預編譯指令,比如"#if","#ifdef","#elif","#else","#endif"。

*處理"#include"預編譯指令,將被包括的檔案插入到該預編譯指令的位置。這個過程是遞迴進行的,也就是說被包含的檔案可能還包含其他檔案。

*新增行號和檔名標識,便於編譯器產生除錯用的行號資訊及用於編譯錯誤或警告的行號顯示。

*保留所有的#pragma編譯器指令,因為編譯器需要使用它們。

編譯過程就是把預處理完的檔案進行一系列詞法分析、語法分析、語義分析及優化後生產相應的彙編**檔案。

彙編器是將彙編**轉變成機器可以執行的指令,生成中間目標檔案,簡稱為目標檔案。

鏈結器--模組拼裝

目標檔案的開頭是乙個「檔案頭」,它描述了整個檔案的檔案屬性,包括檔案是否可執行、是靜態鏈結還是動態鏈結及入口位址(如果是可執行檔案),目標硬體,目標作業系統等資訊,檔案頭還包括乙個段表(section table),段表其實是乙個描述檔案中各個段的陣列。段表描述了檔案中各個段在檔案中的偏移位置及段的屬性等。檔案頭後面就是各個段的內容。

可執行語句都編譯成機器**,儲存在.text段;已初始化的全域性變數和區域性靜態變數都儲存在.data段;未初始化的全域性變數和區域性靜態變數藏在乙個叫.bss的段裡。.bss段只是為未初始化的全域性變數和區域性靜態變數預留位置而已,它們預設值都是0,不需要占用實際空間。其它段不一一枚舉。

符號修飾與函式簽名(name mangling)----為了防止命名衝突

幾乎所有現代的編譯器都支援源**級別的除錯,比如設定斷點,監視變數,單步除錯等,前提是編譯器必須提前將源**與目標**之間的關係儲存到目標檔案裡邊。

oracle基本常識點

答 oracle匯出檔案中的一種格式,oracle也可以匯出sql和pde 用於plsql developer 答 recovery manager rman 是一種用於備份 backup 還原 restore 和恢復 recover 資料庫的 oracle 工具 首先對oracle中的null做一...

ORACLE基本常識

個表空間只能屬於乙個資料庫 每個資料庫最少有乙個控制檔案 建議3個,分別放在不同的磁碟上 每個資料庫最少有乙個表空間 system表空間 建立system表空間的目的是盡量將目的相同的表存放在一起,以提高使用效率 每個資料庫最少有兩個聯機日誌檔案 乙個資料檔案只能屬於乙個表空間 乙個資料檔案一旦被加...

電腦基本常識

一.32位cpu中的32代表什麼?1.32代表cpu的位址線長度,32位處理器表示一次只能處理32位 4個位元組 而64位處理器一次能處理64位,即8個位元組的資料。2.如果我們將總長128位的指令分別按照如果我們將總長128位的指令分別按照16位 32位 64位為單位進行編輯的話 舊的16位處理器...