Advertisement

C++防止内存泄露

阅读量:

内存泄漏

此前已提及,当为某个程序分配了一块内存区域后,若未及时进行释放操作,将可能引发严重的后果。这类未被释放的内存区域将在程序运行结束时才会被系统回收。

倘若该程序持续运行较长时间(例如服务器程序,且并非所有操作系统都如Windows般可每日重启),并且在运行过程中频繁申请新的内存块(通过new操作),一旦忽略了对那些已不再使用的旧内存块的释放操作,这些未被处理的内存块将最终耗尽系统可用内存资源,从而直接导致后续的new操作无法正常执行,并最终引发程序崩溃!

此类编程缺陷通常被称为内存泄漏(memory leak)。

对于C++开发者而言,内存泄漏始终是一个潜藏的风险隐患。在过去数年的C++开发实践中,由于我们应用了一些有效的技术手段,所开发的程序中出现内存泄漏的情况极为罕见。本文将就此问题进行简要介绍。

内存是如何泄漏的

在C/C++程序的内存分配机制中,按照自顶向下的方式可以划分为代码段、数据段、栈区、栈保留区、动态链接库区、堆保留区以及堆区。

C++程序运行过程中,主要涉及的内存区域为[堆Stack]与[栈Heap]。

栈区(stack):该区域的内存分配与释放由编译器自动完成,用于存储运行时函数内部的局部变量、函数参数、返回数据以及返回地址等信息。其操作方式与数据结构中的栈类似,具有先进后出的特点。

堆区(heap)

全部评论 (0)

还没有任何评论哟~