首页 > 系统相关 >C++内存泄漏

C++内存泄漏

时间:2022-10-15 21:26:53浏览次数:59  
标签:泄漏 释放 变量 程序 C++ 内存 使用

       程序在堆中申请的动态内存,在程序使用完成时没有得到及时的释放。当这些变量的生命周期已结束时,该变量在堆中所占用的内存未能得到释放,从而就导致了堆中可使用的内存越来越少,最终可能产生系统运行较慢或者系统因内存不足而崩溃的问题。

  内存泄漏并非指内存从物理上消失,而是指程序在运行过程中,由于疏忽或错误而失去了对该内存的控制,从而造成了内存的浪费。

  内存泄漏主要指堆上分配的变量,因为栈中分配的变量,随着函数退出时会自动回收。而堆是动态分配的,一旦用户申请了内存分配而为及时释放,那么该部分内存在整个程序运行周期内都是被占用的,其他程序无法再使用这部分内存。

  内存泄漏主要指堆上分配的变量,因为栈中分配的变量,随着函数退出时会自动回收。而堆是动态分配的,一旦用户申请了内存分配而为及时释放,那么该部分内存在整个程序运行周期内都是被占用的,其他程序无法再使用这部分内存

  对于实际的程序来说,我们在调用过程中使用 malloc、calloc、realloc、new 等分配内存时,使用完后要调用相应的 free 或 delete 释放内存,否则这块内存就会造成内存泄漏。当然在实际应用中,我们可能在使用系统资源或者在堆中创建对象时,没有及时将这些资源或者对象进行释放时,也会造成内存泄漏,这些资源或者对象的创建实际也占用了堆中的内存,在使用完成时应及时将其进行释放。

  由于内存未得到及时释放,从而可能导致可使用的动态内存空间会越来越少,一旦内存空间全部使用完,则程序可能会导致因为内存不够中止运行。由于内存泄漏导致的问题比较严重,现在许多语言都带有 GC 程序会自动对不使用的内存进行回收,从而避免内存泄漏。

 避免内存泄露的方法:对于 C/C++ 没有 GC 程序的语言来说因为内存造成的问题较多,当然一般情况下如果存在严重的内存泄漏,我们通过查看内存使用统计即可检测到内存泄漏,但是细小的内存泄漏很难通过统计观察到,目前一般都是利用各种内存检测工具来检测内存泄漏,当然关键还是在于统计和分析申请和释放的相关日志。内存检测工具有很多,这里重点介绍下 valgrind 。

标签:泄漏,释放,变量,程序,C++,内存,使用
From: https://www.cnblogs.com/acec/p/16794991.html

相关文章

  • jvm-1.内存结构
    内存结构1.程序计数器1.1定义ProgramCounterRegister程序计数器(寄存器)作用,是记住下一条jvm指令的执行地址特点:是线程私有的不会存在内存溢出1.2......
  • C++大端与小端
    字节序:字节顺序又称端序或尾序(Endianness),在计算机科学领域中,指电脑内存中或在数字通信链路中,组成多字节的字的字节的排列顺序。在几乎所有的机器上,多字节对象都被存储为连......
  • C/C++ 变量的四种存储类型
    所有的数据都有两种类型数据类型:如int,float等存储类型:总共有四种存储类型的变量,分别为自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)。(1......
  • 【C++】统计string里面出现的字符的个数(使用count函数)
    题目:给出一个string字符串,统计里面出现的字符的个数解决方案:使用算法库<algorithm>里面的count函数(不是s.count()!!count是单独作为一个函数,而不是作为一个方法),使用方法是......
  • 内存泄漏
    内存泄漏:当应用程序请求使用一段内存时,操作系统会为其分配特定的内存空间。当应用程序使用完内存后,应该通知操作系统释放内存,以便其他应用程序继续使用。但有些应用程序编......
  • 动态内存分布
    在C中,不同数据在内存中分配说明: 动态内存分配的相关函数:   void*只是提供一个纯地址,不指向任何数据,如下图的*p3void指针类型: 即指针类型为void,不能用*p的......
  • vs code c++ 中文乱码问题
    解决方法:在vscode下方点击编码点击重新编码,改成GB2312同时,对tasks.json中的配置,进行更改......
  • c++游戏客户端修改记录
    c++游戏客户端编译原代码是基于WTL8.0的,可能是vs2005版本编译。本次使用vs2013升级,之后主要遇到的错误记录在此,最后编译成功了项目中已经引入了wtl8的头文件到include......
  • C++关键字之likely和unlikely
    什么是likely和unlikely既然程序是我们程序员所写,在一些明确的场景下,我们应该比CPU和编译器更了解哪个分支条件更有可能被满足。我们是否可将这一先验知识告知编译器和CPU......
  • Flink内存模型
    一、内存布局1、直观图2、树状图 二、内存解释1、Flink使用的内存(1)JVM堆上内存说明:堆上内存管理序列化之后的数据,如果需要处理的数据超出了内存限制,则会将部......