V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Akagi201
V2EX  ›  问与答

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

  •  
  •   Akagi201 · 2014-12-07 16:44:13 +08:00 · 2371 次点击
    这是一个创建于 3667 天前的主题,其中的信息可能已经有所发展或是发生改变。
    8 条回复    2014-12-08 13:46:27 +08:00
    YouXia
        1
    YouXia  
       2014-12-07 16:54:46 +08:00 via Android
    肯定是通用的啊,但是大部分情况下,此类型函数下是使用标准库函数做的操作,可能也包括其他一些简单语句,主要作用就是显得模块化,并且可扩展性吧。
    Akagi201
        2
    Akagi201  
    OP
       2014-12-07 17:34:55 +08:00
    @YouXia 我就是没有遇到过, 内存管理还需要修改的. 不同的操作系统倒是遇到过... ==, 这个就是为不同操作系统移植时候准备的?
    choury
        3
    choury  
       2014-12-07 18:31:45 +08:00 via Android   ❤️ 1
    比如你用的是一个内存池,自己实现的分配释放内存的函数
    YouXia
        4
    YouXia  
       2014-12-07 19:33:51 +08:00 via Android   ❤️ 1
    @Akagi201

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

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

    懂了, 一时没想到例子
    xylophone21
        8
    xylophone21  
       2014-12-08 13:46:27 +08:00
    依赖倒置原则,其它已经有人说了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2782 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 14:15 · PVG 22:15 · LAX 06:15 · JFK 09:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.