malloc()/ free()在Debian和Redhat之间的行为不同

时间:2010-03-22 20:22:50

标签: c linux memory-management malloc

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

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

任何想法为什么两者之间可能存在差异,或者哪种设置可能会控制它等等?

2 个答案:

答案 0 :(得分:4)

我不确定为什么这两个系统的行为会有所不同(可能是来自不同glibc的malloc的不同实现)。但是,您能够通过以下调用对您的流程的全局政策施加一些控制:

mallopt(M_TRIM_THRESHOLD, bytes)

(详见this linuxjournal article)。

您也可以通过

等电话请求立即发布
malloc_trim(bytes)

(参见malloc.h)。我相信这两个电话都会失败,所以我认为你不能依靠它们100%的时间工作。但我的猜测是,如果你试用它们,你会发现它们有所作为。

答案 1 :(得分:0)

有些mem处理程序在需要之前不要将内存呈现为空闲。它反过来让CPU做其他事情然后完成清理。如果你想确认这是真的,那么只需进行一个简单的测试,并在一个循环中分配和释放更多的内存,而不是你有可用的记忆。