首页 > 电脑专区 > 电脑硬件 >

C/C++:[12]栈、堆和内存泄漏

来源:互联网 2023-03-03 10:58:46 410

在《自动存储、静态存储和动态存储》一篇中介绍自动存储通常存储在栈中,动态存储通常存储在堆中。Qtr办公区 - 实用经验教程分享!

这一篇就简单介绍下什么是栈、堆和内存泄漏?Qtr办公区 - 实用经验教程分享!

C/C  :[12]栈、堆和内存泄漏Qtr办公区 - 实用经验教程分享!

工具/原料

  • Microsoft Visual Studio 2012(或其他版本)/

一、栈

  • 1

    栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。Qtr办公区 - 实用经验教程分享!

    允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom)。Qtr办公区 - 实用经验教程分享!

    插入一般称为进栈(PUSH),删除则称为退栈(POP)。Qtr办公区 - 实用经验教程分享!

    栈也称为后进先出(Last In First Out,LIFO)表。Qtr办公区 - 实用经验教程分享!

  • 1此文章未经授权抓取自百度经验
  • 2

    在《自动存储、静态存储和动态存储》一篇中介绍自动存储通常存储在栈中。Qtr办公区 - 实用经验教程分享!

    在代码块执行时,其中包含的自动变量将依次加入到栈中(进栈),而代码块执行完后,则将按照相反的顺序释放这些变量(退栈)。Qtr办公区 - 实用经验教程分享!

  • 二、堆

  • 1

    堆(heap)是一类特殊的数据结构。Qtr办公区 - 实用经验教程分享!

  • 2

    在《自动存储、静态存储和动态存储》一篇中介绍动态存储通常存储在堆中。Qtr办公区 - 实用经验教程分享!

    C 中new和delete管理一个内存池,在C 中称为自由存储空间(free store)或堆(heap)。Qtr办公区 - 实用经验教程分享!

  • 三、内存泄漏

  • 1

    如果使用new运算符在自由存储空间(或堆)上创建变量后,没有调用delete,将发生什么呢?Qtr办公区 - 实用经验教程分享!

  • 2

    如果没有调用delete,则即使包含指针的内存由于作用域规则和生命周期的原因而被释放,在自由存储空间上动态存储的变量或结构也将继续存在。Qtr办公区 - 实用经验教程分享!

    实际上,在上述情况下,将无法访问自由空间的变量和结构,因为指向这些内存的指针无效。这将导致内存泄漏!Qtr办公区 - 实用经验教程分享!

  • 3

    被泄露的内存将在整个程序声明周期内都不可使用;虽然这些内存被分配出去,但是无法收回。Qtr办公区 - 实用经验教程分享!

    在极短情况下,内存泄漏可能导致严重问题,以至于应用程序可用的内存被耗尽,出现内存耗尽错误,导致程序崩溃。Qtr办公区 - 实用经验教程分享!

  • 注意事项

    • 要养成良好的习惯,同时使用new和delete运算符,在自由存储空间上动态分配内存,使用完成即释放它。Qtr办公区 - 实用经验教程分享!

    • 如果您觉得本文对您有所帮助,请点击右上方或者下方的“有用”,多谢!Qtr办公区 - 实用经验教程分享!

    自动存储、静态存...

    以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!Qtr办公区 - 实用经验教程分享!


    标签: 内存

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码