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