84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
为什么有的库中, 内存申请, 释放等函数要做成可修改的, 比如curl. malloc, realloc这种不是通用的吗?
闭关修行中......
是不通用的 要麼暴露記憶體申請釋放的函數, 由模組中申請記憶體. 第二種方法就windows上的做法, 內存由用戶自己管理, 但是內存的大小可以通過函數查詢的. 很多時候windows的API都得很蛋疼的調用兩遍的
很多函式庫有記憶體池的實作 普通的malloc就得封裝了,標準函式庫的malloc之類實作不一定最佳,所以有jmalloc之類的實現,而且效率更高。標準的malloc寫法,除了嵌入式之類的系統都是通用的。基本上C的標準函式庫都需要實現這些。
例如要偵測記憶體外洩的時候,需要在 malloc 上加上記錄。
頻繁呼叫malloc會產生記憶體碎片, 還有記憶體外洩的風險.
malloc
解決方法就是内存池: 事先申請大內存, 自己管理這塊內存, 方便調試, 還方便計算用了多少內存.
内存池
是不通用的
要麼暴露記憶體申請釋放的函數, 由模組中申請記憶體.
第二種方法就windows上的做法, 內存由用戶自己管理, 但是內存的大小可以通過函數查詢的. 很多時候windows的API都得很蛋疼的調用兩遍的
很多函式庫有記憶體池的實作 普通的malloc就得封裝了,標準函式庫的malloc之類實作不一定最佳,所以有jmalloc之類的實現,而且效率更高。標準的malloc寫法,除了嵌入式之類的系統都是通用的。基本上C的標準函式庫都需要實現這些。
例如要偵測記憶體外洩的時候,需要在 malloc 上加上記錄。
頻繁呼叫
malloc
會產生記憶體碎片, 還有記憶體外洩的風險.解決方法就是
内存池
: 事先申請大內存, 自己管理這塊內存, 方便調試, 還方便計算用了多少內存.