淨明想要寫好C語言程序,memory management就是其中的一個重點,如果能建立一套完善的memory management方法,那麼寫出來的C語言程序將穩固高效。C語言對memory的使用分以下幾種:
1. 在整個程序的生命週期內都留駐的memory,這些memory不需要管理,但如果想統計一下這樣的memory數量有多少,可以用一個專用的link把這些memory記錄起來,以便統計和分析,給這個link起個名字,叫GlobalMem.
2. 爲某個任務分配的memory,當任務執行完畢時,就應該釋放。一個任務通常會跨越多個function來執行。應該爲每個任務創建一個memory link,將爲此任務所分配的memory都記錄在這個link中,當任務結束時,使用此link統一釋放爲該任務分配的所有memory。
3. 更爲精細及時地分配和釋放memory的manager,這樣的memory manager專門用來管理比較重要的memory使用,它有自己專有的memory分配和釋放機制,相比與在任務結束時統一釋放memory,能提供更爲精細的memory釋放服務。
4. 在一個function中使用的memory,function結束時應自動釋放,就是常說的stack, 應該儘量使用這種類型的memory,但OS對這種類型memory的使用量有一定的限制(Linux默認爲8M),因此要注意,僅在需要少量memory時使用這種類型的memory。如果在function範圍內需要大量的memory,就需要使用heap,那麼應該在function的結尾設置釋放heap memory的代碼,並在function中使用goto統一跳轉到結尾的memory釋放代碼。
實現上述memory management方法:
1. Global memory management link: GlobalMem,用於管理全局memory.
2. 每個任務的memory management link: **TaskMem,用於管理某個任務的memory.
3. 遺漏memory management link: UnmanagedMem, 用於收集未被上述的兩種memory management link收集的memory.
4. 在每個function的參數中添加memory management link作爲參數: every_function( Link *mem = NULL )。28Please respect copyright.PENANAeogaKjb0Hh
當爲這個參數傳入指定的memory management link時,則在此function中使用此link作爲memory management link;28Please respect copyright.PENANAPPYfSnwpw2
如果傳入的Link值爲NULL,則使用UnmanagedMem記錄此function中memory的分配。
5. 各種專用的能精細管理meomory使用的memory manager,對他們的使用不需要傳入上述的memory management link作爲參數。
6. 在程序結束時,應打印出GlobalMem和UnmanagedMem的使用量,如果使用量異常,則要進行處理。
如果您對程式設計、編程技術、C語言、網站開發、計算機系統的管理維護等有興趣,可以通過以下方式與淨明交流:【微信】si_jinmin 【Email】si.jinmin@gmail.com28Please respect copyright.PENANAsNm0hz4NpH
28Please respect copyright.PENANAcw8785cRyn