1.12. 为什么进程的大小不缩减?

当你使用‘free()’函数释放内存给堆时,几乎所有的系统都*不*减少你程序的 对内存的使用。被‘free()’释放的内存仍然属于进程地址空间的一部份,并将 被将来的‘malloc()’请求所重复使用。

如果你真的需要释放内存给系统,参看使用‘mmap()’分配私有匿名内存映射 (private anonymous mappings)。当这些内存映射被取消映射时,内存真的将其释放给 系统。某些‘malloc()’的实现方法(比如在GNU C库中)在允许时自动使用‘mmap()’ 实施大容量分配;这些内存块(blocks)随着‘free()’被释放回系统。

当然,如果你的程序的大小增加而你认为它不应该这样,你可能有一个‘内存泄 露’(‘memory leak’)- 即在你的的程序中有缺陷(bug)导致未用的内存没释放。