代码之家  ›  专栏  ›  技术社区  ›  StasM

malloc()/free()行为在debian和redhat之间有所不同

  •  1
  • StasM  · 技术社区  · 15 年前

    我有一个Linux应用程序(用C编写),它通过malloc()以小块的形式分配大量内存(约60米),然后释放内存(应用程序继续运行)。这个内存不会返回到操作系统,而是保持分配给进程的状态。

    现在,有趣的是,这种行为只在Redhat Linux和克隆(Fedora、CentOS等)上发生,而在Debian系统上,在完成所有释放之后,内存会返回到操作系统。

    有什么想法,为什么两者之间会有区别,或者哪个设置可以控制它,等等?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Will Robinson    15 年前

    我不确定为什么这两个系统的行为会有所不同(可能不同的glibc实现了不同的malloc)。然而,你 应该 能够通过以下电话对流程的全球政策施加一些控制:

    mallopt(M_TRIM_THRESHOLD, bytes)
    

    (见 this linuxjournal article 详情请参阅。

    您也可以通过类似的呼叫请求立即释放

    malloc_trim(bytes)
    

    (见malloc.h)。我相信这两个电话都会失败,所以我认为你不能完全依靠它们工作。但我的猜测是,如果你尝试一下它们,你会发现它们会产生影响。

        2
  •  0
  •   eaanon01    15 年前

    一些mem处理程序在需要内存之前不将其显示为空闲内存。相反,它让CPU做其他事情,然后完成清理。如果您想确认这是真的,那么只需做一个简单的测试,在一个循环中分配和释放的内存比您有内存可用的次数多。