Linux进程内存用量分析之堆内存篇( 五 )


如果使用定制内存池,一个细节就是内存池的分配器应该尽量避免再使用malloc/new分配空间,而是直接使用系统调用brk或者mmap申请空间 。因为内存池通常会缓存一部分内存以提升分配效率,而如果保留的内存恰巧为分配区的堆顶,就会导致堆无法收缩从而造成比较严重的内存空洞问题 。而且与底层分配器嵌套使用会使内存多次对齐,并且使内存块多加一层首部,造成不必要的浪费 。
 
总结本文介绍了linux进程内存泄漏的检测方法,并且通过例子介绍了一种分析堆内存占用的方法 。在面对内存膨胀问题时,如果排除了内存泄漏原因,可能就会觉得再往下排查有些无从下手 。但是core_analyzer为我们提供了一种便捷的分析内存占用的方式,虽然这种便捷是相对的,也不妨碍它成为我们面对内存难题时一个很好的选择 。
内存管理是所有C++开发者需要面对的难题 。C++语言在提供给开发者较高的内存支配自由度的同时,也将内存管理问题丢给开发者 。优秀的内存管理策略可以充分利用内存支配的特性,使程序效率飞升 。而复杂的内存管理一旦出现问题,定位起来也会非常困难 。这就需要我们去深入到底层,了解内存的布局,一点一点分析内存管理的结构 。使用一些工具协助排查也许会收获事半功倍的效果 。当然除了本文介绍的方法外还有别的方法来分析内存问题,如果有更好的方法,也欢迎大家进行交流 。




推荐阅读