內聯函數與普通函數區別&可執行文件結構介紹

1、內聯函數與普通函數的區別:

普通函數在編譯後會被放到代碼段,然後函數執行過程中調用普通函數是需要先壓棧,然後根據函數調用地址調用函數,函數返回後執行出棧操作。這樣就會存在一個調用過程,有時間消耗(對於頻繁調用的子函數就可以考慮寫成內聯函數的形式)。

而一個內聯函數在編譯後會將函數代碼插入到調用處,這樣雖然會增加代碼段的空間(內聯函數的代碼出現在其所有調用處),但是可以減少調用函數過程的時間開銷。



2、代碼編譯生成的可執行文件,分爲三個段——代碼段、數據段(data)、BSS段(Block Started by Symbol);

其中代碼段存放了可供CPU執行的機器指令,數據段存放了已初始化的全局變量、靜態變量、以及常量數據,而BSS段則存儲了那些未初始化的全局變量以及靜態變量;

當程序被加載到內存空間時,還會另外增加兩個段——堆和棧;

堆:動態內存分配——程序員負責申請和釋放;

棧:存放函數的參數值與局部變量值,在任務切換時負責儲存上下文的內容;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章