`

什么是内存泄露问题?

阅读更多

·简介................................................

       在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程序员才可以分析出来。然而,有不少人习惯于把任何不需要的内存使用的增加描述为内存泄漏,即使严格意义上来说这是不准确的。
       一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。

·后果...............................................

       内存泄漏会因为减少可用内存的数量从而降低计算机的性能。最终,在最糟糕的情况下,过多的可用内存被分配掉导致全部或部分设备停止正常工作,或者应用程序崩溃。
       内存泄漏可能不严重,甚至能够被常规的手段检测出来。在现代操作系统中,一个应用程序使用的常规内存在程序终止时被释放。这表示一个短暂运行的应用程序中的内存泄漏不会导致严重后果。
       在以下情况,内存泄漏导致较严重      后果:
       * 程序运行后置之不理,并且随着时间的流失消耗越来越多的内存(比如服务器上的后台任务,尤其是嵌入式系统中的后台任务,这些任务可能被运行后很多年内都置之不理);
       * 新的内存被频繁地分配,比如当显示电脑游戏或动画视频画面时;
       * 程序能够请求未被释放的内存(比如共享内存),甚至是在程序终止的时候;
       * 泄漏在操作系统内部发生;
       * 泄漏在系统关键驱动中发生;
       * 内存非常有限,比如在嵌入式系统或便携设备中;
       * 当运行于一个终止时内存并不自动释放的操作系统(比如AmigaOS)之上,而且一旦丢失只能通过重启来恢复。

分享到:
评论

相关推荐

    GDB查找内存泄露

    内存泄露是程序开发中常见的问题,它会导致程序长时间运行后消耗过多内存,进而引发系统性能下降甚至崩溃。GDB(GNU Debugger)是一个强大的调试工具,能够帮助开发者在C/C++等语言的程序中查找和定位内存泄露的问题...

    electron-vue开发环境内存泄漏问题汇总.docx

    Electron-Vue 开发环境内存泄漏问题汇总 本文主要介绍了 Electron-Vue 开发环境中内存泄漏问题的解决方案。 Electron-Vue 是一个基于 Electron 和 Vue.js 的开发框架,用于构建桌面应用程序。然而,在开发环境中,...

    console.log 一定会导致内存泄漏?不打开 devtools 就不会

    不打开 devtools 怎么确定内存泄漏问题呢? 看下内存大小不就知道了? 通过 performance.memory.totalJSHeapSize 是可以拿到堆内存大小的。 我们通过分析 console.log 的代码执行后的堆内存大小变化就行。

    windbg内存泄漏问题

    windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题windbg内存泄漏问题

    OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)【转】

    OpenCV中的内存泄露问题解决方案 在使用OpenCV时,经常会遇到内存泄露的问题,特别是在使用cvLoadImage和cvCloneImage函数时。这些函数的使用不当将导致内存泄露,影响程序的稳定性和性能。本文将详细介绍这两个...

    Iframe内存泄露分析

    Iframe 内存泄露分析是指在使用 Iframe 时,由于互相引用、闭包、跨页面泄漏、伪泄漏等原因,导致浏览器内存泄漏的问题。这种问题在 Ajax 盛行以前并不是什么大问题,因为都是通过页面跳转和刷新来进行与服务端的...

    详解QT内存泄露问题

    ### 详解QT内存泄露问题 在探讨QT内存管理机制及如何避免内存泄露之前,我们首先应当理解何为内存泄露。内存泄露是指程序中已分配的堆内存由于未能释放,导致一直占用这部分内存空间,最终可能导致应用程序运行缓慢...

    android中用getApplicationContext()会不会避免某些内存泄漏问题?

    RT,在android开发中,如果在使用context的地方全部用getApplicationContext()会不会避免某些内存泄漏问题? 首先,Activity的Context和Application的Context肯定不是一个东西,一个是当前活动的 Context,它的生命...

    opencv3和opencv4多线程内存泄漏问题

    opencv3和opencv4多线程内存泄漏问题:以cv::resize函数测试结果为例。 使用中可修复或者可避免内存泄漏:1)使用opencv2的版本;2)在代码中设置修复该问题.

    JProfiler对应用服务器内存泄漏问题诊断解决方案.docx

    JProfiler对应用服务器内存泄漏问题诊断解决方案 一、概述 本文主要介绍如何使用 JProfiler 对应用服务器内存泄漏问题进行诊断和解决。内存泄漏是指应用服务器中的一种常见问题,表现为内存长期不合理占用,内存...

    Delphi new\dispose内存泄露问题解决方案

    当我们谈论"Delphi new\dispose内存泄露问题解决方案"时,我们聚焦的是如何正确地分配和释放内存,尤其是针对结构体指针和字符串类型,这是Delphi内存泄漏问题的常见来源。本文将深入探讨这个问题,并提供相应的解决...

    javascript内存泄露问题的解析

    JavaScript内存泄露问题的解析 JavaScript内存泄露问题是一种常见的bug,它会导致系统崩溃和性能下降。内存泄露是指系统不能正确地管理内存分配的情况,这可能会导致程序调用失败、执行减慢等问题。 在JavaScript...

    electron-vue开发环境内存泄漏问题汇总

    在使用Electron结合Vue进行桌面应用开发时,内存泄漏是一个常见且需要重点关注的问题。内存泄漏问题的出现会逐渐消耗系统资源,最终可能导致应用崩溃或运行缓慢。在Electron中,内存泄漏主要跟主进程和渲染进程的...

    Windows内存泄漏排查工具

    在Windows操作系统中,内存泄漏是一种常见的性能问题,它会导致系统资源逐渐消耗殆尽,影响程序的稳定性和整体系统的运行效率。为了解决这个问题,开发者通常会使用专门的内存泄漏检测工具。本文将详细介绍两个用于...

    Linux 内存泄露查找

    特别是在动态内存分配场景下,如果不妥善处理,很容易出现内存泄露的问题。内存泄露不仅会消耗系统资源,还可能导致应用程序性能下降甚至崩溃。因此,掌握如何有效地检测和定位内存泄露问题显得尤为重要。本文将详细...

    vs2010内存泄露检查工具

    标题中的“vs2010内存泄露检查工具”指的是Visual Leak Detector(VLD),这是一个为Visual C++编译器设计的插件,它可以在运行时检测并报告C++程序中的内存泄漏情况。VLD能够集成到VS2010的环境中,使得开发者可以...

    几个内存泄漏的例子

    内存泄漏是C++编程中一个严重的问题,它指的是程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能看似无害,但随着时间推移,大量的内存泄漏会消耗掉系统的可用内存,导致性能下降甚至系统崩溃。...

    java内存泄漏问题追踪

    4. "java内存泄露专题研究和应用_石麟.docx"可能提供了更深入的研究和实际案例,包括如何识别特定类型的内存泄漏,以及针对不同场景下的解决方案。而"ha450.jar"可能是一个示例应用或者工具,用于演示内存泄漏问题...

    SWT内存泄露解决办法

    然而,SWT应用程序可能会遇到内存泄露问题,这会导致程序运行缓慢,甚至崩溃。本文将深入探讨SWT内存泄露的原因、如何检测以及解决方法。 内存泄露通常发生在程序不再需要对象时,但这些对象仍然保留在内存中,无法...

Global site tag (gtag.js) - Google Analytics