程式中通常會有大量的函式呼叫,這些被呼叫的函式只要有宣告(而不需要定義實現),編譯器就可以成功處理。在生成可執行檔案的過程中,聯結器將各個可執行程式的**段組合到一起,而有函式呼叫的地方還需要找到真正的函式定義才可以完成連線。因此,函式的定義和呼叫者可以在乙個**段內,也可以在不同的**段內。聯結器會根據需要根據實際的情況修改編譯器生成的機器**,完成正確的跳轉。
函式跳轉的連線過程如圖:
與函式跳轉類似的是全域性變數的訪問,在c語言編譯的過程中,程式可以訪問用extern宣告的外部全域性變數,在連線的過程中,聯結器需要找到實際變數在資料段中的位置,完成正確的變數訪問。
程式中全域性變數的連線如圖所示。
對於可執行檔案的生成,其主要的工作是組合各個目標檔案中的三個段。還將包含一些其他的過程。首先,所有的可執行程式都需要指定乙個入口,在c語言中入口即main函式,在乙個c語言的應用程式各個原始檔中,只能包含乙個main函式。其次,不同系統所使用的可執行程式可能包含不同的頭資訊,頭資訊是在主要段之外附加的資訊,可以供作業系統載入可執行程式的時候使用。
知識點:在連線過程之前,各個原始檔生成目標檔案相互沒有關係。在連線之後,各目標檔案函式和變數可以相互呼叫和訪問,從而被聯絡在一起。
C 設計模式 二十六 觀察者模式
基於map的觀察者模式 定義物件之間的一對多依賴關係,使得每當乙個物件狀態發生改變時,其相關依賴物件皆得到通知並被自動更新。又稱為依賴,發布 訂閱。存在兩個部分 觀察者 觀察事件是否發生,發生通知監聽者 具體觀察者 監聽者 具體觀察者 處理事件。1.優點 2.缺點 3.使用場景 觀察者的設計類圖如下...
二十六 C 中的資料型別轉換
顯示轉換 強制轉換 將字串型別轉換成對應的值型別 如 double.parse int.parse 將指定型別的值轉換成指定型別,較為簡單,如 object obj 11 int num int obj 將任意型別轉換成指定型別 如 短整型convert.toint16 整型convert.toin...
組合語言(二十六)之自然數求和
輸入乙個數n,對1到n的所有自然數求和 程式執行 mov ax,datas 初始化ds mov ds,ax 輸入提示 lea dx,input mov ah,9 int 21h 輸入n lea dx,n string max length mov ah,10 int 21h 轉換成為數字 lea s...