内存泄漏
什么是内存泄漏
程序块在[堆]中申请的[动态内存], 在程序块使用完成后没有得到[及时释放], 从而导致了堆中可使用的内存越来越少的现象
- 内存泄漏是逻辑上的概念, 指在程序运行期间, 总内存的可复用率变低的问题
- 内存泄漏主要指在[堆]上分配的变量所占用的内存, 因为[栈]中分配的变量, 会随着函数退出时自动回收. 而堆是动态分配的
- 不仅要考虑
malloc,calloc,realloc,new等分配的内存是否得到了释放, 也要考虑使用系统资源或者在[堆]中创建的对象
内存泄漏的检测与预防的实践
通常会利用各种[内存检测工具]来检测内存泄漏, 其原理也是统计和分析内存的申请和释放的相关日志
以下通过 valgrind 的实践来介绍
valgrind 实践
valgrind 是 Linux 下, 开源代码 (GPL V2) 的仿真调试工具的集合, 包括以下工具:
- Memcheck: