js 中堆和栈的应用与理解

  • 定义
      • 堆内存:
      • 栈内存:
    • 堆和栈在js中的应用
      • 栈:
      • 堆内存

堆和栈有两种
一种是说的数据结构—堆,堆栈
一种是说的内存—堆内存,栈内存
我今天要说的就是堆内存和栈内存

定义

堆内存:

堆内存是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间。
一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表

栈内存:

由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈

堆和栈在js中的应用

栈:

用于储存基本数据类型

  • 每格大小有限 可做简单存储
  • 只能存储基本数据类型(大小有限)
变量存储空间 值存储空间
a 3
b fad
c 0x0012ff7c
d true
e 姓名

变量存储空间:用来存储变量
值存储空间:用来存储基本数据类型的值

堆内存

用于存放引用数据类型:数组,对象,函数
程序申请内存,查询空内存,第一个空内存的地址给到变量存在栈中指向堆内存的地址

如果将图中的变量d赋值给一个新的变量
此时不会开辟新的空间拷贝而是会将d中存的地址给新的变量,
然后储存到栈中
举个形象的例子:
把地址比做钥匙,每次需要先拿指针’领’一块空内存空间(房间),地址就像钥匙每次想进入房间做些事情需要有这个钥匙,
而变量就像是不同的人,而重新赋值就像是给他配了一把’钥匙’,
而不同的人会给这个钥匙起了不同的名字比如第一个人给他起名叫b,第二个人可能会起个e啥的,这个人可以通过变量来操作数据.
这种简单的赋值其实就是js中的浅拷贝
只复制到了个地址
如果想深拷贝可以通过
var obj2 = deepCopy(obj);
或map
可以防止修改后原数据被修改

js 中堆和栈的应用与理解相关推荐

  1. java中堆与栈的区别 彻底理解

    每一个Java应用都唯一对应一个JVM实例,每一个实例唯一对应一个堆.应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并由应用所有 的线程共享.跟C/C++不同,Java中分配堆内存是自动初始 ...

  2. JAVA中堆和栈的区别和联系

    一.Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存. 堆:主要用于储存实例化的对象,数组.由JVM动态分配内存空间.一个JVM只有一个堆内存,线程是可以共享数据的. 栈 ...

  3. 内存中“堆”和“栈”的区别

    内存中"堆"和"栈"的区别: 程序中用来存放数据的内存分为四块,分别是: 1.全局区(静态区)(static):全局变量和静态变量都存储在这块区域,与其他变量的 ...

  4. Java虚拟机:Java中堆和栈的详细区别

    一.Java中内存分配策略: 在比较堆和栈的区别之前,我们先了解下Java的内存分配策略,按照编译原理的观点,程序运行时的内存分配有三种策略,分别是:静态的,栈式的,和堆式的. (1)静态存储分配:是 ...

  5. java堆和栈 常量池_GitHub - han-guang-xue/difference-of-stack-heap-pool: Java中堆、栈和常量池的区别...

    Java中堆.栈和常量池的区别 栈 堆 常量池的概念 首先我们先了解一下概念,Java把内存分成两种,一种叫做栈内存,一种叫做堆内存. 栈内存 存放基本类型的变量数据和对象类型的引用(请注意存放的是引 ...

  6. java堆和客栈_java中堆和栈的区别分析

    堆和栈是java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...

  7. C++中堆和栈的完全解析

    C++中堆和栈的完全解析 内存分配方面: 堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并 ...

  8. java堆和客栈_JAVA中堆、栈,静态方法和非静态方法的速度问题

    一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储速度,只知道堆 ...

  9. c语言中栈堆,全程剖析C语言中堆和栈的区别

    C语言中堆和栈的区别 1.申请方式 (1)栈(satck):由系统自动分配.例如,声明在函数中一个局部变量int b;系统自动在栈中为b开辟空间. (2)堆(heap):需程序员自己申请(调用mall ...

最新文章

  1. 【人尽其才】颠覆思维☞合理分配工作
  2. JingRiverOS的自由软件之路
  3. 网页打印问题,打印设置,打印预览,打印分页,纵打,横打及页面的边距
  4. java反射的运用_java反射的使用
  5. atitit.jQuery Validate验证框架详解与ati Validate 设计新特性
  6. WebAPI(part2)--获取元素
  7. JAVA_HOME系统环境变量
  8. 了解jQuery并掌握jQuery对象和DOM对象的区别
  9. STL之multiset简介
  10. Java面试的基础题20190000
  11. 激活mircrosoft office2013
  12. 注塑模具设计师要懂得的四个概念
  13. k8s部署微服务项目
  14. 【无标题】抖音 s_v_web_id
  15. 科软-信息安全实验2-netfilter实验
  16. python自动群发邮件_24.python之自动群发邮件(1)
  17. 多种ubuntu引导修复方法
  18. cl 编译器环境配置问题
  19. Flink1.11 读取kafka数据写入hive,未完待续
  20. 应用深度学习function-loss-optimization 2020.8.24

热门文章

  1. FastReport数据库连接路径及软件的最终分发数据库路径问题
  2. 建立一个vs+qt打开系统摄像头的程序
  3. Javascript第五章history对象第四课
  4. java合并后求和_用分支/合并框架执行并行求和
  5. html页面画一个矩形,使用HTML5 canvas绘制一个矩形的方法
  6. html 网络请求 json数据,写一个json格式API,http请求接收json数据
  7. java读取mysql配置文件_MySql主从复制,从原理到实践
  8. MySql学习10-----存储过程和函数
  9. 零基础学习 Python 之前期准备
  10. VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别