博客
关于我
(P53)面向对象版表达式计算器:内存跟踪器的实现
阅读量:409 次
发布时间:2019-03-05

本文共 1151 字,大约阅读时间需要 3 分钟。

文章目录

1.内存跟踪器的实现

  • 1个解决方案中可以包含多个工程

    在这里插入图片描述
    在这里插入图片描述
    所以要编译和启动CalculatorTest项目,则需要将其设置为启动项目
    在这里插入图片描述
    接着运行,此时就是CalculatorTest项目
    在这里插入图片描述

  • 有几种方法可以跟踪内存使用状况呢?

    (1)自己实现malloc(new内部也是使用malloc实现的),在里面进行跟踪
    (2)推荐使用内存检测工具进行跟踪:
    Linux:valgrind,dmalloc,efence
    Windows:visual leak detector
    (3)自己编写小型的内存跟踪器:重载operator new和operator delete来进行跟踪
    new operator等价于operator new先分配内存 + 如果是一个类对象还会调用构造函数,所以可以在operator new中跟踪在哪一个文件哪一行分配了内存

  • 头文件的包含次序,为了防止一些隐含的依赖:C库、C++库、其他库.h、项目中的.h

  • eg:编写测试程序测试内存泄漏时发生的情况

    P53\CalculatorTest\main.cpp

#include 
using namespace std;#include "DebugNew.h"int main(void){ int* p =new int; // delete p; return 0;}
  • 测试:

    在这里插入图片描述

  • eg:P53\CalculatorTest\main.cpp

#include 
using namespace std;#include "DebugNew.h"int main(void){ int* p =new int; delete p; return 0;}
  • 测试:
    在这里插入图片描述
    按下F11
    此时调用的operator delete并不是void operator delete(void* p, const char*, long),所以这里需要重载void operator delete(void*p),否则可能存在误报的现象
    在这里插入图片描述
  • eg:P53\CalculatorTest\main.cpp
#include 
using namespace std;#include "DebugNew.h"int main(void){ int* p =new int; delete p; int* p2 = new int[5]; //delete[] p2; return 0;}
  • 测试:

    在这里插入图片描述

  • 为啥要重载operator delete[]运算的原因?

    在这里插入图片描述
    因为发现通过打断点进入debug,发现调用的是这种的delete
    在这里插入图片描述

转载地址:http://ljfzz.baihongyu.com/

你可能感兴趣的文章
NIFI大数据进阶_离线同步MySql数据到HDFS_说明操作步骤---大数据之Nifi工作笔记0028
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南002---大数据之Nifi工作笔记0069
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>
NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
查看>>
NIH发布包含10600张CT图像数据库 为AI算法测试铺路
查看>>
Nim教程【十二】
查看>>
Nim游戏
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NIO_通道之间传输数据
查看>>
NIO三大组件基础知识
查看>>
NIO与零拷贝和AIO
查看>>
NIO同步网络编程
查看>>
NIO基于UDP协议的网络编程
查看>>
NIO笔记---上
查看>>