如果使用定制内存池,一个细节就是内存池的分配器应该尽量避免再使用malloc/new分配空间,而是直接使用系统调用brk或者mmap申请空间 。因为内存池通常会缓存一部分内存以提升分配效率,而如果保留的内存恰巧为分配区的堆顶,就会导致堆无法收缩从而造成比较严重的内存空洞问题 。而且与底层分配器嵌套使用会使内存多次对齐,并且使内存块多加一层首部,造成不必要的浪费 。
总结本文介绍了linux进程内存泄漏的检测方法,并且通过例子介绍了一种分析堆内存占用的方法 。在面对内存膨胀问题时,如果排除了内存泄漏原因,可能就会觉得再往下排查有些无从下手 。但是core_analyzer为我们提供了一种便捷的分析内存占用的方式,虽然这种便捷是相对的,也不妨碍它成为我们面对内存难题时一个很好的选择 。
内存管理是所有C++开发者需要面对的难题 。C++语言在提供给开发者较高的内存支配自由度的同时,也将内存管理问题丢给开发者 。优秀的内存管理策略可以充分利用内存支配的特性,使程序效率飞升 。而复杂的内存管理一旦出现问题,定位起来也会非常困难 。这就需要我们去深入到底层,了解内存的布局,一点一点分析内存管理的结构 。使用一些工具协助排查也许会收获事半功倍的效果 。当然除了本文介绍的方法外还有别的方法来分析内存问题,如果有更好的方法,也欢迎大家进行交流 。
推荐阅读
- linux日志关键字检索&处理
- linux中多种查看系统时间的命令
- 本地Docker Jenkins构建dotcore web应用到Linux服务器 Docker上
- 在 Linux 终端快速检测网站是否宕机的 6 个方法
- linux run level 为何物
- SQLite使用内存数据库
- Linux下如何使用crontab来定时执行脚本任务?
- Linux的图形用户界面-你会选择哪个?
- Linux的Cache和Buffer理解
- 不知道这十项Linux常识,别说自己是运维工程师