鏈結 裝載與庫 程序的堆

2021-08-01 23:17:14 字數 1054 閱讀 3790

*本次只是簡要的總結堆的基本情況,具體的函式分析和堆演算法分析今後會繼續再學習。。。→_→*

程式在任意時刻都可能會發出請求,申請或釋放一段記憶體資源,堆由此而生。

堆(heap)linux程序堆管理linux下的程序堆管理提供了兩種堆空間分配方式(系統呼叫):

void* mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);

glibc中的malloc函式處理請求方式如下

堆分配演算法:管理一大塊連續的記憶體空間,按照需求分配或釋放其中的空間

位圖(bitmap)將整個堆劃分為許多相同大小的塊(block),當使用者請求資源時,分配給使用者整數個塊空間。第乙個塊稱為已分配區域的頭(head),其餘的塊稱為已分配區域的主體(body)。因此每個塊只有頭/主體/空閒三種狀態,只需要兩位二進位制位即可表示乙個塊

資料結構:使用整數陣列記錄塊的使用情況

使用11表示h(head),10表示主體(body),00表示空閒(free)

對應的點陣圖為:(high)11-00-00-10-10-10-11-00-00-00-00-00-00-00-10-11

分配演算法特點:

優點: 缺點:

物件池把整個堆空間劃分為大量小塊每次請求時只需要找到乙個小塊

裝載 鏈結與庫

第五部分 windows動態鏈結 1 dll函式和變數必須在檔案顯示是匯入還是匯出,declspec dllexport 匯出,declspec dllimport 匯入.建立dll檔案的時候.c檔案生成.dll,lib,exp檔案,然後用.lib檔案和exe中的.c檔案生成的目標檔案鏈結在一起,生...

鏈結 裝載與庫

鏈結 裝載與庫 在linux下,當我們使用 gcc來編譯 helloword 程式時,只需要 gcc hello.c a.out hello world 其中實際包括4步驟 預處理 prepressinng 編譯 compliation 彙編 assembly 鏈結 linking 1.預編譯 gc...

鏈結 裝載與庫

二 編譯和鏈結 1 預處理過程主要處理那些以 開始的預編譯命令如 include define if 等,但保留 pragma 編譯器指令 因為編譯器要使用它們 另外刪除所有注釋,新增行號和檔名標識。gcc e test.c test.i cpp test.c test.i 2 編譯,生成 s 的彙...