内存泄漏是由于错误的内存分配而导致的计算机程序中资源的错位。 当未使用的RAM位置保持未释放时,会发生这种情况。 内存泄漏不应该与空间泄漏混淆,这是指使用更多的RAM而不是必要的程序。 据说在windows10系统上发生内存泄漏时,尽管内存不被访问,仍然无法访问内存。
内存泄漏在Windows 10中
在开始之前,您应该知道内存泄漏是调试的软件问题 - 例如在Java,JavaScript,C / C ++,Windows等中。不需要物理替换RAM或硬盘。

为什么这么糟糕
内存泄漏显然是不好的,因为它是系统中的一个缺陷,一个缺陷。 但让我们来看看它究竟如何影响系统:
1、由于即使不使用也不释放内存,因此会导致内存耗尽。
2、内存耗尽会导致软件老化。
3、可用内存减少导致系统响应时间增加和性能下降。
4、未经检查的内存泄漏可能最终导致应用程序崩溃。
为了识别内存泄漏,程序员需要访问程序的源代码。
找到泄漏
为了解决一个问题,我们需要首先确定它。 找出内存泄漏的基本步骤是:
1、确认:确定是否发生泄漏。
2、查找内核模式内存泄漏:查找由内核模式驱动程序组件引起的泄漏。
3、查找用户模式内存泄漏:查找由用户模式驱动程序或应用程序引起的泄漏。
内存分配
应用程序分配RAM有不同的模式。 如果使用后空间没有释放,则不管分配的方式如何,都会发生内存泄漏。 一些常见的分配模式是:
1、HealAlloc函数用于堆内存分配。 C / C ++运行时等价物是malloc和new。
2、VirtualAlloc函数可以从操作系统直接分配。
3、Kernel32 API来保存应用程序的内核内存。 例如,CreateFile,CreateThread。
4、User32 API和Gdi32 API。
防止内存泄漏
我们都知道预防胜于治疗,所以这里有一些防止内存泄漏的方法。
监控习惯
您需要留意个别程序和应用程序的RAM使用异常情况。 您可以通过按CTRL + SHIFT + ESC去到Windows任务管理器,并添加像句柄,用户对象,GDI对象等列。
这将帮助您轻松监视资源使用情况。
Microsoft工具来诊断内存泄漏
各种工具可以诊断各种分配模式下的内存泄漏:
1、应用程序验证程序会诊断堆泄漏。
2、UMDH(Windows调试工具的一个组件)通过监视堆内存分配来诊断单个进程的泄漏。
3、跟踪捕获以全面分析RAM的使用情况。
4、Xperf也跟踪堆分配模式。
5、CRT调试堆不仅跟踪堆分配,而且还使编码实践,以减少泄漏。
6、JavaScript内存泄漏检测器调试代码中的内存泄漏。
使用提示
1、为Win32资源和堆分配使用内核HANDLEs和其他智能指针。
2、从ATL库获取内核分配自动资源管理的类。 C ++标准具有用于堆分配的auto_ptr。
3、使用_com_ptr_t或_bstr_t或_variant_t封装“智能指针”内的COM接口指针。
4、监视、NET代码是否有异常的内存使用情况。
5、避免函数的多个退出路径,以便在函数结束时从大多数块中的变量中释放分配。
6、只有在释放_finally块中的所有分配后才使用本机异常。 将所有的堆封装起来,将分配处理成智能指针,以便使用C ++异常。
7、在重新初始化或放弃PROPVARIANT对象之前始终调用PropVariantClear函数。
相关文章
网友评论(共有 0 条评论)