page contents

堆和栈有什么区别?

轩辕小不懂 发布于 2022-01-08 10:50
阅读 630
收藏 0
分类:C/C++开发
  • c
  • c++
  • 2838
    Nen
    Nen
    - 程序员

    分配和管理方式不同:

    堆是动态分配的,其空间的分配和释放都由程序员控制;

    栈是由编译器自动管理的,其分配方式有两种:静态分配由编译器完成,比如局部变量

    会由编译器释放;

    产生碎片不同:

    对堆来说,频繁使用new/delete或者malloc/free会造成内存空间的不连续,产生大量碎

    对栈来说,不存在碎片问题,因为栈具有先进后出的特性;

    生长方向不同:

    堆是向着内存地址增加的方向增长的,从内存的低地址向高地址方向增长;

    栈是向着内存地址减小的方向增长的,从内存的高地址向低地址方向增长;

    申请大小限制不同:

    栈顶和栈底是预设好的,大小固定;

    堆是不连续的内存区域,其大小可以灵活调整

    请先 登录 后评论