C++ 中的内存泄漏检测
什么是内存泄漏,为什么它们很危险?
毫不奇怪,内存像任何其他资源一样是有限的。32位进程最多可以分配2Gb;对于 64 位进程来说,它是 8 TB,但实际上内存受到硬件的限制,因此,它要少得多。这就是为什么在不需要内存时释放内存非常重要。否则,进程会耗尽内存或崩溃,从而影响可用性。
当内存不断地分配在一个地方并被一次又一次调用时,这是特别危险的。乍一看,一个小的忘记分配并不是一个大问题,但进行一百万次后,它很快就会成为一个严重的错误。
在 C# 或 Java 中,运行时假定为不再需要的对象释放内存。相比之下,C++开发人员必须注意内存管理。
使用 C++ 运行时库检测内存泄漏
大多数内存分配是由标准 C/C++ 函数进行的:malloc、calloc、operator new、operator new[],其余的由操作系统 API 分配。在 Visual C++ 中,可以告诉 C++ 运行时记录每个此类分配的调用堆栈。不过,它仅适用于调试版本。
要启用泄漏检测,您必须在每个源文件中的任何#include语句之前定义_CRTDBG_MAP_ALLOC。插入_CrtDumpMemoryLeaks以显示有关当前分配的信息。
考虑以下示例:
1
2
3
4
5
6
|