1、內聯函數與普通函數的區別:
普通函數在編譯後會被放到代碼段,然後函數執行過程中調用普通函數是需要先壓棧,然後根據函數調用地址調用函數,函數返回後執行出棧操作。這樣就會存在一個調用過程,有時間消耗(對於頻繁調用的子函數就可以考慮寫成內聯函數的形式)。
而一個內聯函數在編譯後會將函數代碼插入到調用處,這樣雖然會增加代碼段的空間(內聯函數的代碼出現在其所有調用處),但是可以減少調用函數過程的時間開銷。
2、代碼編譯生成的可執行文件,分爲三個段——代碼段、數據段(data)、BSS段(Block Started by Symbol);
其中代碼段存放了可供CPU執行的機器指令,數據段存放了已初始化的全局變量、靜態變量、以及常量數據,而BSS段則存儲了那些未初始化的全局變量以及靜態變量;
當程序被加載到內存空間時,還會另外增加兩個段——堆和棧;
堆:動態內存分配——程序員負責申請和釋放;
棧:存放函數的參數值與局部變量值,在任務切換時負責儲存上下文的內容;