我有一个Linux应用程序(用C编写),它通过malloc()以小块分配大量内存(~60M)然后释放它(应用程序继续运行)。此内存不会返回到操作系统,而是保持分配给进程。
现在,有趣的是这种行为只发生在RedHat Linux和克隆(Fedora,Centos等)上,而在Debian系统上,内存在完成所有释放后返回给操作系统。
任何想法为什么两者之间可能存在差异,或者哪种设置可能会控制它等等?
答案 0 :(得分:4)
我不确定为什么这两个系统的行为会有所不同(可能是来自不同glibc的malloc的不同实现)。但是,您应能够通过以下调用对您的流程的全局政策施加一些控制:
mallopt(M_TRIM_THRESHOLD, bytes)
(详见this linuxjournal article)。
您也可以通过
等电话请求立即发布malloc_trim(bytes)
(参见malloc.h)。我相信这两个电话都会失败,所以我认为你不能依靠它们100%的时间工作。但我的猜测是,如果你试用它们,你会发现它们有所作为。
答案 1 :(得分:0)
有些mem处理程序在需要之前不要将内存呈现为空闲。它反过来让CPU做其他事情然后完成清理。如果你想确认这是真的,那么只需进行一个简单的测试,并在一个循环中分配和释放更多的内存,而不是你有可用的记忆。