linux - 为什么有的库中, 内存申请, 释放等函数要做成可修改的, 比如curl. malloc, realloc这种不是通用的吗?
阿神
阿神 2017-04-17 12:07:40
0
5
353

为什么有的库中, 内存申请, 释放等函数要做成可修改的, 比如curl. malloc, realloc这种不是通用的吗?

阿神
阿神

闭关修行中......

Antworte allen(5)
伊谢尔伦

是不通用的
要么暴露内存申请释放的函数, 由模块中申请内存.
第二种方法就windows上的做法, 内存由用户自己管理, 但是内存的大小可以通过函数查询的. 很多时候windows的API都得很蛋疼的调用两遍的

黄舟
  1. 不一定所有平台都提供了 malloc 的实现
  2. 定制的 malloc 可以节省内存,提高性能
阿神

很多库有内存池的实现 普通的malloc就得封装了,标准库的malloc之类实现不一定最佳,所以有jmalloc之类的实现,而且效率更高。标准的malloc写法,除了嵌入式之类的系统都是通用的。基本上C的标准库都需要实现这些。

巴扎黑

比如要检测内存泄露的时候,需要在 malloc 上加记录。

阿神

频繁调用malloc会产生内存碎片, 还有内存泄露的风险.

解决办法就是内存池: 事先申请大内存, 自己管理这块内存, 方便调试, 还方便计算用了多少内存.

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage