📺 内存泄漏排查手册
机顶盒·嵌入式
⚡ 30章 · 从入门到实战
🧩 友好色系
01
内存泄漏基础
什么是内存泄漏
对机顶盒的影响
常见泄漏场景
02
Linux内存管理基础
虚拟/物理内存
页表与MMU
malloc/free底层
brk/mmap
03
内存泄漏检测工具概述
Valgrind
AddressSanitizer
mtrace
dmalloc
自己写Hook
04
Valgrind实战
安装与配置
Memcheck使用
检测泄漏点
生成调用栈
抑制文件
05
AddressSanitizer实战
编译选项
运行时环境变量
错误报告解读
与Valgrind对比
06
mtrace与dmalloc
mtrace原理与使用
dmalloc配置分析
轻量级方案选择
07
自己动手写内存检测工具
Hook malloc/free
记录分配信息
打印泄漏报告
性能开销分析
08
机顶盒典型泄漏场景1
视频解码器缓冲区未释放
解码器实例泄漏
硬件内存映射未回收
09
机顶盒典型泄漏场景2
网络协议栈泄漏
socket未关闭
epoll事件泄漏
DNS缓存泄漏
10
机顶盒典型泄漏场景3
UI框架泄漏
图片资源未释放
字体缓存泄漏
动画回调泄漏
11
机顶盒典型泄漏场景4
中间件与插件泄漏
DVB模块泄漏
CA模块泄漏
PVR模块泄漏
12
内存泄漏排查方法论
二分法定位
日志分析法
代码审查法
压力测试法
回归测试法
13
二分法定位泄漏
注释代码缩小范围
git bisect辅助
结合静态分析
14
日志分析法
关键路径添加日志
日志级别控制
日志轮转
分析脚本
15
代码审查法
代码审查清单
常见泄漏模式
Review流程
自动化检查工具
16
压力测试法
长时间运行测试
内存压力测试
边界条件测试
自动化测试框架
17
回归测试法
建立基线
自动化回归
比较内存曲线
告警机制
18
内存泄漏修复策略
延迟释放
引用计数
智能指针
对象池
内存池
19
引用计数与智能指针
shared_ptr/weak_ptr
自定义引用计数
循环引用问题
性能考量
20
对象池与内存池
对象池设计
内存池实现
固定大小分配器
性能对比
21
延迟释放与垃圾回收
延迟释放策略
标记-清除算法
引用跟踪
实时性影响
22
内存泄漏预防
编码规范
代码审查
静态分析
单元测试
持续集成
23
编码规范
内存管理规范
RAII
所有权模型
命名规范
24
静态分析工具
Cppcheck
Clang Static Analyzer
Coverity
SonarQube
25
单元测试与内存测试
Google Test
内存泄漏测试用例
Mock对象
覆盖率分析
26
持续集成中的内存检测
CI流水线集成
每日构建
内存测试报告
告警通知
27
机顶盒内存优化技巧
减少动态分配
使用栈分配
数据结构优化
缓存对齐
28
案例分析1:开机内存泄漏
问题描述
排查过程
修复方案
经验总结
29
案例分析2:直播频道切换泄漏
问题描述
排查过程
修复方案
经验总结
30
总结与展望
最佳实践
未来趋势
学习资源推荐
Q&A