关于MFC中CMemoryState的一些使用
来源:互联网 发布:非法网络众筹平台案例 编辑:程序博客网 时间:2024/04/28 10:10
确切的说,在C++中对内存的管理是挺复杂的,申请内存的同时也必须记得释放内存,new匹配delete, new[]匹配delete[].还有更困难的是在涉及到组模(Module),这点暂不讨论,等我搞清楚后会和大家分享。现在先说一下CMemoryState,如有什么不足之处,或者是错误的地方,请各位看官不吝赐教,谢谢。
在MFC中,可以使用CMemoryState检测内存泄露,内存的泄露是由于程序在内存分配和检索中错误使用了C++的new或delete操作符导致的。我们可以创建CMemoryState对象,来快速查看当前内存的分配情况,不多说了,直接代码吧!
1. 没有 delete.
Output:
1-------------------
Dumping objects ->
e:/test/ccing.cpp(101) : {140} normal block at 0x003B8A10, 6 bytes long.
Data: < > CD CD CD CD CD CD
Object dump complete.
2-------------------
Memory Lack!
3-------------------
0 bytes in 0 Free Blocks.
6 bytes in 1 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 0 bytes.
Total allocations: 6 bytes.
4-------------------
Detected memory leaks!
Dumping objects ->
e:/test/ccing.cpp(101) : {140} normal block at 0x003B8A10, 6 bytes long.
Data: < > CD CD CD CD CD CD
Object dump complete.
大家可以看到,申请多少了内存,内存被分配到什么地方都有说明,最后还提示内存泄露!
2. 加入delete
Output:
2-------------------
3-------------------
0 bytes in 0 Free Blocks.
0 bytes in 0 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 0 bytes.
Total allocations: 6 bytes.
4-------------------
都释放干净了。
3. 测试一些数据类型.
(1).c数据类型
Output:
2-------------------
3-------------------
0 bytes in 0 Free Blocks
0 bytes in 0 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 0 bytes.
Total allocations: 0 bytes.
c类型的没有构造,且不能对C的malloc/free.GlobalAlloc/GlobalFree或LocalAlloc/LocalFree的检测!
(2).C++类型 string
Output:
2-------------------
3-------------------
0 bytes in 0 Free Blocks
0 bytes in 0 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 0 bytes.
Total allocations: 0 bytes.
这是STL的事情,STL有一套自己的内存的管理的方法。
(3).对MFC类型 CString
Output:
1-------------------
Dumping objects ->
f:/sp/vctools/vc7libs/ship/atlmfc/src/mfc/strcore.cpp(141) : {147} normal block at 0x003B8CC0, 23 bytes long.
Data: <, ?x > 2C 08 3F 78 06 00 00 00 06 00 00 00 01 00 00 00
Object dump complete.
2-------------------
Memory Lack!
3-------------------
0 bytes in 0 Free Blocks.
23 bytes in 1 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 0 bytes.
Total allocations: 23 bytes.
4-------------------
// 没有 Detected memory leaks!
大家可以看到,这是MFC自己的事情,2块内存相比,存在差异,但是并没有提醒Detected memory leaks!
总结:我们在使用内存检测的时候最好就是检测new 和delete 不要检验其他的数据类型。也可以检测某个函数调用完后内存的使用情况,大家可以自己试一试~哈哈
- 关于MFC中CMemoryState的一些使用
- CMemoryState的使用
- CMemoryState的使用看内存监测
- MFC判断内存泄露的简单方法 CmemoryState
- MFC中关于对话框的一些设置
- MFC中一些使用的方法
- MFC中一些使用的方法
- MFC中一些使用的方法
- MFC中一些使用的方法
- MFC中一些使用的方法
- MFC中关于控件变量的使用!
- 关于MFC中dll的使用
- 关于MFC中使用vector的问题
- 关于vs2010 mfc中CFile的一些用法
- MFC中关于虚函数的一些问题
- 关于VC、MFC和ACCESS的一些使用问题
- 关于MFC的一些经验。
- 关于MFC的一些理解
- Qt 中一些常用类的中文说明
- WINCE流驱动的动态加载调试
- XML与DataSet的相互转换类
- 【转】 网站爬虫解决方案一 暨Heritrix抓取
- Oracle Clustered Table
- 关于MFC中CMemoryState的一些使用
- 构造嵌入式Linux系统----内核篇
- struts2国际化
- 谷歌雅虎新闻大战-两种路线的PK
- C++代码覆盖测试工具
- VB 操作 Execl
- asp.net 对xml文件的读写,添加,修改,删除操作
- simply scheme 第十三章 练习
- 网络仿真