美文网首页
【扩展1】内存堆栈

【扩展1】内存堆栈

作者: 牧_青 | 来源:发表于2020-10-08 19:18 被阅读0次

  首先需要明确,通常所说的内存堆栈和数据结构中的堆栈并不是一个概念。
  我们知道,程序一般存放在ROM(只读内存),在程序运行的时候,会将程序拷到RAM(随机存储器)中,同时,会在其中生成程序运行所需的常量,变量等信息。RAM存储的逻辑空间如下图所示(以C语言为例):


内存地址空间.png

1、栈

用于存放程序定义的局部变量,当需要存储新的变量时,从高位往地位扩展空间

  • 系统自动分配和回收栈空间
  • 在内存中连续存储,所以分配和读取速度较快
  • 空间较少,超出时会提示栈溢出
  • 一旦分配完成,不能更改所占用的内存大小

2、堆

由程序员在程序中主动申请的内存空间,从低位往高位扩展空间

  • 由程序员主动申请内存空间,不使用时需要显式释放,或者程序退出时释放,如果使用完成不释放,容易导致内存泄露
  • 操作系统维护一个记录空闲内存地址的链表,当需要申请内存空间时,会从低地址到高地址遍历链表,找出大于申请内存的空间分配给程序使用,将分配后剩余的内存重新维护成一个新的空闲节点。存储空间不连续
  • 和栈相比,可分配的空间较大
  • 分配完成之后,还可以重新调节变量所占用的内存地址大小

可读写区

用于存放全局变量和静态变量,与上面两种分配内存的时间不同,可读写区在程序编译器就会为变量分配地址

只读区

用于存放程序和常量

相关文章

  • 【扩展1】内存堆栈

      首先需要明确,通常所说的内存堆栈和数据结构中的堆栈并不是一个概念。  我们知道,程序一般存放在ROM(只读内存...

  • 性能优化-内存管理

    内存布局 栈区向下扩展 堆区向上扩展 由于内存有限,如果碰面就会出现堆栈溢出的情况 在栈区里面因为方法 函数 会形...

  • 前端线路图

    1 堆栈内存以及闭包作用域 1 js中的基本数据类型以及其区别 (8种) 2 js堆栈内存的运行机制 3 变量提升...

  • iOS 关于堆栈

    iOS 关于堆栈 1. 堆栈定义低位地址的 内存块。 (执行速度最快, 先进后出, 大小比堆小,不需要手动释放内存...

  • 堆栈内存

    JS中的内存:堆内存和栈内存 堆内存是用来存储引用数据类型值的(例如:创建函数和创建对象,就像开辟一个堆内存,把代...

  • 堆栈内存

    浏览器打开一个页面,首先会从计算机的虚拟内存中分配两块内存出来 栈内存Stack[ECStack] 执行上下文栈+...

  • go内存管理

    1. Go 内存的划分 强烈推荐参考链接 在讲Go的堆栈之前,先温习一下堆栈基础知识。 什么是堆栈?在计算机中堆栈...

  • iOS 内存管理 (1):堆栈

    栈: 栈是线程执行过程中存放在低地址位缓存数据的一个内存块,其读写速度是快的。一个线程对应一个这样的内存块,栈是先...

  • 堆栈内存和js代码执行

    1.堆栈内存是什么? 1)内存大概分4块, 栈内存存放基本变量和对象的引用, 堆内存存放对象,栈内存中的引用指向堆...

  • JS 堆栈内存

    堆栈内存的作用 JS 中的内存堆内存和栈内存,所有堆栈内存的处理,浏览器会自行在内部执行 栈内存: 提供一个供 J...

网友评论

      本文标题:【扩展1】内存堆栈

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