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

2014-12-07 16:44:13 +08:00
 Akagi201
2279 次点击
所在节点    问与答
8 条回复
YouXia
2014-12-07 16:54:46 +08:00
肯定是通用的啊,但是大部分情况下,此类型函数下是使用标准库函数做的操作,可能也包括其他一些简单语句,主要作用就是显得模块化,并且可扩展性吧。
Akagi201
2014-12-07 17:34:55 +08:00
@YouXia 我就是没有遇到过, 内存管理还需要修改的. 不同的操作系统倒是遇到过... ==, 这个就是为不同操作系统移植时候准备的?
choury
2014-12-07 18:31:45 +08:00
比如你用的是一个内存池,自己实现的分配释放内存的函数
YouXia
2014-12-07 19:33:51 +08:00
@Akagi201

见楼上例子,基本上就会封装下标准库。另外我也见过为了可移植性,封装的,比如涉及到系统函数,Win、Linux下做不同的调用。

这个不用太纠结啊,这种封装肯定利于修改代码啊。
RemRain
2014-12-07 20:28:16 +08:00
malloc、realloc 等默认是由 glibc 提供的,做成可修改的好处是,方便修改为第三方内存管理库,比如 jemalloc
lsmgeb89
2014-12-07 20:45:05 +08:00
curl 还真是体贴周到啊。比较大型的程序,几十万行到百万行,应该有自己的内存管理策略,有专门的模块负责,一是提高效率,二是方便调试内存问题。这样的程序用第三方库的代码时候,就可能改掉原来的内存接口,统一调用内部的模块。
Akagi201
2014-12-07 22:01:31 +08:00
@lsmgeb89
@RemRain
@YouXia

懂了, 一时没想到例子
xylophone21
2014-12-08 13:46:27 +08:00
依赖倒置原则,其它已经有人说了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/152174

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX