堆和栈的区别

作者: 冰吉凌 | 来源:发表于2015-04-21 19:03 被阅读2679次

相同:都是内存空间的一部分

异:

(1)分配;堆是由程序员自己分配的(new或者malloc),而栈是由系统自动分配的;

(2)效率;堆由程序员自己管理效率很低,而栈由编译器管理,效率很高;

(3)大小;栈的默认大小为1M,而堆的大小可以很大(达到4G,和计算机的虚拟内存有关);

(4)增长方向;栈向下增长(高地址向低地址),堆向上增长(低地址向高地址);

(5)内存碎片:栈由编译器管理,不会产生内存碎片,而堆由程序员自己管理,会产生内存碎片!

(6)申请后系统的响应:

栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则,将报异常提示栈溢出。

堆:首先应该知道操作系统应该有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。由于找到的堆结点的大小不一定正好等于申请的大小,系统自动的将多余的那部分重新放入空闲链表中。

相关文章

  • 10.11java中的堆和栈

    java高级-堆和栈 java堆 /栈 栈内存 / 堆内存的区别 1. java堆 /栈 2. 栈内存 / 堆内存的区别

  • java中栈内存和堆内存有什么区别

    java中栈内存和堆内存有什么区别 栈内存和堆内存的区别: 1、栈内存用来存放基本类型的变量和引用变量,堆内存用来...

  • 栈和堆的区别

    堆栈空间分配区别 1、栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的...

  • 堆和栈的区别

    作者:思羽链接:https://www.zhihu.com/question/19729973/answer/13...

  • 栈和堆的区别

    最主要的区别: Java中所有由类实例化的对象(new)和数组都存放在堆内存中,无论是成员变量,局部变量,还是类变...

  • 堆和栈的区别

    堆和栈的区别(内存和数据结构) 在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于...

  • 堆和栈的区别

    (JVM(虚拟)内存中的堆和栈)堆和栈都是内存中的一部分,有着不同的作用,而且一个程序需要在这片区域上分配内存。 ...

  • 堆和栈的区别

    非原创,学习使用。 本文转自:https://blog.csdn.net/hairetz/article/deta...

  • 堆和栈的区别

    一.堆和栈的概述栈:编译器自动分配内存,存放参数值以及局部变量的值,类似于数据结构中的栈,使用完成后由系统自动回收...

  • 堆和栈的区别

    一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编...

网友评论

    本文标题:堆和栈的区别

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