84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
为什么有的库中, 内存申请, 释放等函数要做成可修改的, 比如curl. malloc, realloc这种不是通用的吗?
闭关修行中......
是不通用的 要么暴露内存申请释放的函数, 由模块中申请内存. 第二种方法就windows上的做法, 内存由用户自己管理, 但是内存的大小可以通过函数查询的. 很多时候windows的API都得很蛋疼的调用两遍的
很多库有内存池的实现 普通的malloc就得封装了,标准库的malloc之类实现不一定最佳,所以有jmalloc之类的实现,而且效率更高。标准的malloc写法,除了嵌入式之类的系统都是通用的。基本上C的标准库都需要实现这些。
比如要检测内存泄露的时候,需要在 malloc 上加记录。
频繁调用malloc会产生内存碎片, 还有内存泄露的风险.
malloc
解决办法就是内存池: 事先申请大内存, 自己管理这块内存, 方便调试, 还方便计算用了多少内存.
内存池
是不通用的
要么暴露内存申请释放的函数, 由模块中申请内存.
第二种方法就windows上的做法, 内存由用户自己管理, 但是内存的大小可以通过函数查询的. 很多时候windows的API都得很蛋疼的调用两遍的
很多库有内存池的实现 普通的malloc就得封装了,标准库的malloc之类实现不一定最佳,所以有jmalloc之类的实现,而且效率更高。标准的malloc写法,除了嵌入式之类的系统都是通用的。基本上C的标准库都需要实现这些。
比如要检测内存泄露的时候,需要在 malloc 上加记录。
频繁调用
malloc
会产生内存碎片, 还有内存泄露的风险.解决办法就是
内存池
: 事先申请大内存, 自己管理这块内存, 方便调试, 还方便计算用了多少内存.