基于重载算法的内存泄漏检测和内存越界检测

本文介绍了内存泄漏的概念及其对计算机性能的影响,特别是针对C和C++这类无垃圾回收机制的语言。文章重点讲解了如何通过重载`new`和`delete`操作符来自动检测堆内存泄漏,帮助开发者有效定位并解决内存泄漏问题。

通过重载`new`,`delete`实现对在动态内存分配中内存越界和内存泄露的自动检测

1. 内存泄漏

1.1 简介

`内存泄漏`是当程序不正确地进行内存管理时出现的一种资源泄漏,表现为程序不再需要使用的内存空间并没有及时被释放掉。内存泄漏并非指物理内存的消失,而是在程序分配了某段内存后,由于设计错误,失去了对该段内存的控制,造成了内存的浪费.

1.2 危害

内存泄漏减少计算机可用内存,从而影响了计算机的性能。如果内存泄漏过于严重,整个操作系统、应用程序甚至会崩溃,计算机性能会大打折扣。但是,一般情况下,在现代操作系统中,当一个应用程序结束的时候,该应用程序所占用的内存会被操作系统自动地全部释放,因此,内存泄漏的后果往往不会很严重,甚至不会被察觉到。但是,当长时间运行程序或者设备内存较小时,内存泄漏的问题就不容忽视。作为程序员,我们有必要尽力避免内存泄漏,养成良好的编程习惯.

1.3 分类

内存泄漏尤其会发生在没有垃圾回收机制(Garbage collection)的编程语言,例如:C和C++,也就是说程序并不会自动实现内存管理。对于C和C++这两种语言,我们主要关心两种类型的内存泄漏:

  • 堆内存泄漏:程序通过`malloc`,`realloc`,`new`等函数在堆空间中申请了一块内存,但是在使用完后并没有用`free`,`delete`等函数将所申请的内存的内存释放掉,导致相应的那块内存一直被占用。

  • 系统资源泄漏:程序在使用系统分配的资源比如Bitmap,handle等之后,并没有用相应的函数释放掉,导致相应内存的占用和系统资源的浪费。

本次只针对堆内存泄漏提出自动检测的方法。

1.4 解决内存泄漏

解决内存泄漏的困难之处在于:

  • 编译器不能发现这些问题

  • 在程序运行时才有可能捕捉到这些错误,而且这些错误没有明显的症状,时隐时现

  • 一般解决内存泄漏必须需要程序员获得源码,通过修改源码的方式解决,比较耗时

因此,我们需要想出一种简便的方法,可以较大程度地自动检测出内存泄漏,及时提醒程序员对程序进行修正,在此我们通过重载`new`、`delete`函数的方式实现了自动检测的功能,下面将介绍`new`和`delete`函数。

点击此处下载文档和源码

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值