Windows Embedded从入门到精通系列课程
WinCE内存泄漏的检测和防范
黄文中
Wi CE/XPE
培训讲师
MVP
Wi
n
CE/XPE
培训讲师
e
MVP
研博科技有限公司
研博科技有限公司
http://wince.cn/
本次课程内容包括
本次课程内容包括
z 内存分配机制
z 各种内存工具的工作原理
z
有无内存泄漏的判定
z
有无内存泄漏的判定
z 定位内存泄漏的代码
z 防范内存泄漏的编程指引
z
Di
及
Aliti
测漏实例
D
z
D
r
i
ve
r
及
A
pp
li
ca
ti
on
测漏实例
D
emo
收听本次课程需具备的条件
收听本次课程需具备的条件
熟悉
:
•
32
位的嵌入式
CPU
架构
,
熟悉
:
32
位的嵌入式
CPU
架构
,
X86/ARM,及其MMU等
Wi CE
系统调用机制
C dll dll
等
•
Wi
n
CE
系统调用机制
,
C
ore
dll
.
dll
等
•C/C++
编程
经验
编程
• Debug及Log经验
Level 200
涉及的问题
涉及的问题
WinCE特有的
系统 有内存碎片
的
回收功能
• 问题一:WinCE
系统
是否
有内存碎片
的
回收功能
?
• 答案一:没有像台式机的自动回收,只有当内存不够时才回收低优
先级的线程堆和栈
主要由
用户自己处理
内存
NCF
除外
先级的线程堆和栈
.
主要由
用户自己处理
内存
..
N
et
CF
除外
.
问题
如何才能不产生内存碎片
?
•
问题
二:
如何才能不产生内存碎片
?
• 答案二:首先分配和释放应当对称,顺序是按栈式分配和释放(即
按
1
2
3
顺序分配
3
2
1
顺序释放
)
可以避免内存碎片的产生
按
1
-
2
-
3
顺序分配
,
3
-
2
-
1
顺序释放
)
,
可以避免内存碎片的产生
.
问题三
如果有了内存碎片
什么情况下
能重新利用内存碎片
?
•
问题三
:
如果有了内存碎片
,
什么情况下
能重新利用内存碎片
?
• 答案三:如果无法按栈式分配和释放,产生了内存碎片.只要每次
分配都是固定一样的大小
在
分配和释放
总数相等时
内存
最大需
分配都是固定一样的大小
,
在
分配和释放
总数相等时
,
内存
最大需
求量不会增长,因为碎片的大小正是要分配的大小,可以再利用.
涉及的问题
• 问题四:如何判断是否有内存泄漏?
•
答案四
:
通过
GlobalMemoryStatus
查看内存使用率是否
答案四
:
通过
GlobalMemoryStatus
查看内存使用率是否
不停地增长, 有就是有内存泄漏.也可以使用Performance
Moniter等工具.
•
•
问题
五:
内存泄漏
检测
工
具的
一
般做什么
工
作
?
问题
内存泄漏
检测 具的 般做什么 作
• 答案五:拦截测试模块的内存相关API调用,记录调用时的
堆栈快照(LOG),对分配出的内存加标识(TAG).验证分配和
释放是否配对.Handle/Object等内核对象的使用是否规范
,以及对照Symbol文件找错误代码.
•
• 问题六:哪些API函数与内存泄漏有关,需要监控?
• 答案六: 主要有(1)Virtual/Heap/MappingFile.
(2)Handle相关. (3)GDI对象相关
评论0