美文网首页
5个方面看栈区和堆区的区别

5个方面看栈区和堆区的区别

作者: 天地不仁以万物为刍狗 | 来源:发表于2016-07-05 22:21 被阅读374次

1、管理方式:

            对于栈来讲,是由编译器自动管理,无需手动控制。对于堆来说,释放工作由开发人员控制,容易memoryleak。

2、申请大小:

栈是向低地址扩展的数据结构,是一块连续的内存区域。(意思是说栈顶的地址和栈的最大容量是系统预先规定好的,如果申请的空间超过栈的剩余空间,就会overflow)。因此能从栈获得的空间较小

堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表类存储的空闲内存地址,自然是不连续的内存区域。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大

3、碎片问题:

堆:频繁的new/delete会造成内存空间的不连续,从而造成大量碎片,是程序效率降低

栈:不会存在此问题,因为栈是先进先出(FIFO)的队列,永远不可能有一个内存块从栈中间弹出

4、分配方式:

分配方式:

堆是动态分配,没有静态分配的堆。

堆区动态分配由编译器进行释放,无需手动实现

栈有两种分配方式:静态、动态分配

栈的静态分配是编译器完成的,比如局部变量的分配。

栈的动态分配由alloc函数分配。

5、申请效率的比较:

栈由系统自动分配,速度快,但开发者无法控制

堆由new分配的内存,速度慢,而且容易产生内存碎片,不过用起来最方便

相关文章

  • 5个方面看栈区和堆区的区别

    1、管理方式: 对于栈来讲,是由编译器自动管理,无需手动控制。对于堆来说,释放工作由开发人员控制,容易...

  • 堆与栈 堆区和栈区的区别

    一、 栈和堆事数据结构中的叫法,栈区和堆区是进程的内存模型中的堆区和栈区 二 内存模型里堆区和栈区和数据结构没有关...

  • 栈和堆以及栈区和堆区的区别

    栈和堆以及栈区和堆区的区别 数据结构中的栈和堆 栈:具有先进后出性质的数据结构 堆:一种经过排序的树形数据结构,节...

  • 堆区、栈区的区别

    栈和堆 应用程序在运行的过程中,应用程序保存的数据都保存内存中,不同数据类型的数据保存的内存区域不同。 栈:具有先...

  • 线性表和队列

    首先,讨论的堆和栈指的是内存中的“堆区”和“栈区”。C语言的内存模型分为5个区:栈区、堆区、静态区、常量区、代码区...

  • 巨人大哥谈Java工程师高手之路

    JVM方面 JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性、重排序、顺序一致性...

  • Java大佬之学习历程(一)

    基础篇 JVM: ①JVM内存结构: 堆、栈、方法区、直接内存、堆和栈区别, ②JVM参数及...

  • 栈,堆,全局区,常量区,代码区的区别

    原文栈,堆,全局区,常量区,代码区的区别 1)、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局...

  • Java工程师成神之路

    一、基础篇JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 https://blog.csdn.net...

  • 面试常见问题03 - 操作系统(施工ing)

    目录 堆内存与栈内存进程和线程同步与异步阻塞与非阻塞... 1. 内存区域 区域划分 堆区与栈区的区别 2. 进程...

网友评论

      本文标题:5个方面看栈区和堆区的区别

      本文链接:https://www.haomeiwen.com/subject/antkjttx.html