一.棧
棧儲存了乙個函式呼叫所需要的維護資訊,稱為堆疊幀或活動記錄,包含的內容:
乙個函式的活動記錄用ebp和esp兩個暫存器劃定範圍。esp暫存器始終指向棧的頂部,同時也就指向了當前函式的活動記錄的頂部。而ebp暫存器指向了函式活動記錄的乙個固定位置,ebp暫存器又被稱為棧指標,ebp指向的資料是呼叫該函式前ebp的值,這樣在函式返回的時候,ebp可以通過讀取這個值恢復到呼叫前的值。之所以要儲存一些暫存器,在於編譯器可能要求某些暫存器在呼叫前後保持不變,那麼函式就可以在呼叫開始時將這些暫存器的值壓入棧中,在結束後再取出。活動記錄:
函式返回值傳遞:
**:
typedef struct big_thing
big_thing;
bit_thing return_test()
int main()
偽**:
void return_test(void *temp)
int main()
如果返回值型別的尺寸太大,c語言在函式返回時會使用乙個臨時的棧上記憶體區域作為中轉,結果返回值物件會被拷貝兩次。因而不到萬不得已,不要輕易返回大尺寸的物件。
二.堆linux程序堆管理:
linux提供了兩種堆空間分配方式:乙個是brk()系統呼叫,另乙個是mmap()。
q&a:
堆分配演算法:
常見的幾種演算法:
mysql vc執行庫 VC 執行庫安裝
vc 執行庫 visual c 可再發行程式包 是執行使用相應版本的 visual c 開發的應用程式時必要的元件。wampserver內建的apache mysql mariadb和php就依賴vc 執行庫,所以我們需要在電腦上安裝好vc 執行庫,否則無法正常使用wampserver。wampse...
鏈結 裝載與庫 執行庫
本篇簡單介紹下執行庫,並總結下乙個程式的最終執行環境。作業系統裝載程式之後,並不是馬上從main 函式開始。程式執行的第一行 是從elf可執行檔案頭中的入口位址開始的。從入口位址開始的 會負責準備好main函式執行所需要的環境,並且負責呼叫main函式。之後,你才可以放心的在main函式中申請記憶體...
執行庫實現
堆的實現 io與檔案操作 字串相關操作 格式化字串 helloworld程式無須用到的功能就不實現,比如異常 盡量簡化設計,盡量符合c 標準庫的規範 對於可以直接在標頭檔案實現的模組盡量在標頭檔案中實現,以免諸多的類 函式的宣告和定義造成 量膨脹,不便於演示 執行庫 要做到可以在windows和li...