内存--堆与栈

作者: 逾期的誓言 | 来源:发表于2018-03-21 10:37 被阅读23次
屏幕快照 2018-03-21 上午10.33.37.png

<一>申请后的系统响应

:存储每一个函数在执行的时候都会向操作系统索要资源,栈区就是函数运行时的内存,栈区中的变量由编译器负责分配和释放,内存随着函数的运行分配,随着函数的结束而释放,由系统自动完成。

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


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

<二> 申请大小的限制

栈:栈是向低地址扩展的数据结构,是一块连续的内存的区域。是栈顶的地址和栈的最大容量是系统预先规定好的,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数 ) ,如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。

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

栈:由系统自动分配,速度较快,不会产生内存碎片
堆:是由alloc分配的内存,速度比较慢,而且容易产生内存碎片,不过用起来最方便

相关文章

  • 10.11java中的堆和栈

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

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

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

  • 堆内存与栈内存

  • 栈内存与堆内存

    JavaScript中的执行环境栈和 栈内存与堆内存 小李子_前端 关注 2018.01.17 17:28 字数 ...

  • 内存--堆与栈

    <一>申请后的系统响应 栈:存储每一个函数在执行的时候都会向操作系统索要资源,栈区就是函数运行时的内存,栈区中的变...

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

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

  • 内存

    内存的几大区域 栈内存和堆内存 所谓的栈内存和堆内存并不是内存里面有一块区域叫栈,有一块区域叫堆.所谓的栈内存和对...

  • 变量提升

    堆内存 & 栈内存 JS中的内存一共两种:堆内存和栈内存 堆内存 作用:用来存储引用数据类型值的内存空间叫做堆内存...

  • 堆和栈

    一 java 堆内存和栈内存 java把内存分为两种:一种是堆内存,一种是栈内存 堆: 堆内存主要存储实例化对象,...

  • JS中的堆栈问题以及影响

    堆(heap) 堆 是堆内存的简称。一个混沌,杂乱无章,方便存储和开辟内存空间。 栈(stack) 栈 是栈内存的...

网友评论

    本文标题:内存--堆与栈

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