js 中堆和栈的应用与理解
js 中堆和栈的应用与理解
- 定义
- 堆内存:
- 栈内存:
- 堆和栈在js中的应用
- 栈:
- 堆内存
堆和栈有两种
一种是说的数据结构—堆,堆栈
一种是说的内存—堆内存,栈内存
我今天要说的就是堆内存和栈内存
定义
堆内存:
堆内存是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间。
一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表
栈内存:
由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈
堆和栈在js中的应用
栈:
用于储存基本数据类型
- 每格大小有限 可做简单存储
- 只能存储基本数据类型(大小有限)
变量存储空间 | 值存储空间 |
---|---|
a | 3 |
b | fad |
c | 0x0012ff7c |
d | true |
e | 姓名 |
变量存储空间:用来存储变量
值存储空间:用来存储基本数据类型的值
堆内存
用于存放引用数据类型:数组,对象,函数
程序申请内存,查询空内存,第一个空内存的地址给到变量存在栈中指向堆内存的地址
如果将图中的变量d赋值给一个新的变量
此时不会开辟新的空间拷贝而是会将d中存的地址给新的变量,
然后储存到栈中
举个形象的例子:
把地址比做钥匙,每次需要先拿指针’领’一块空内存空间(房间),地址就像钥匙每次想进入房间做些事情需要有这个钥匙,
而变量就像是不同的人,而重新赋值就像是给他配了一把’钥匙’,
而不同的人会给这个钥匙起了不同的名字比如第一个人给他起名叫b,第二个人可能会起个e啥的,这个人可以通过变量来操作数据.
这种简单的赋值其实就是js中的浅拷贝
只复制到了个地址
如果想深拷贝可以通过
var obj2 = deepCopy(obj);
或map
可以防止修改后原数据被修改
js 中堆和栈的应用与理解相关推荐
- java中堆与栈的区别 彻底理解
每一个Java应用都唯一对应一个JVM实例,每一个实例唯一对应一个堆.应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并由应用所有 的线程共享.跟C/C++不同,Java中分配堆内存是自动初始 ...
- JAVA中堆和栈的区别和联系
一.Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存. 堆:主要用于储存实例化的对象,数组.由JVM动态分配内存空间.一个JVM只有一个堆内存,线程是可以共享数据的. 栈 ...
- 内存中“堆”和“栈”的区别
内存中"堆"和"栈"的区别: 程序中用来存放数据的内存分为四块,分别是: 1.全局区(静态区)(static):全局变量和静态变量都存储在这块区域,与其他变量的 ...
- Java虚拟机:Java中堆和栈的详细区别
一.Java中内存分配策略: 在比较堆和栈的区别之前,我们先了解下Java的内存分配策略,按照编译原理的观点,程序运行时的内存分配有三种策略,分别是:静态的,栈式的,和堆式的. (1)静态存储分配:是 ...
- java堆和栈 常量池_GitHub - han-guang-xue/difference-of-stack-heap-pool: Java中堆、栈和常量池的区别...
Java中堆.栈和常量池的区别 栈 堆 常量池的概念 首先我们先了解一下概念,Java把内存分成两种,一种叫做栈内存,一种叫做堆内存. 栈内存 存放基本类型的变量数据和对象类型的引用(请注意存放的是引 ...
- java堆和客栈_java中堆和栈的区别分析
堆和栈是java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...
- C++中堆和栈的完全解析
C++中堆和栈的完全解析 内存分配方面: 堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并 ...
- java堆和客栈_JAVA中堆、栈,静态方法和非静态方法的速度问题
一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储速度,只知道堆 ...
- c语言中栈堆,全程剖析C语言中堆和栈的区别
C语言中堆和栈的区别 1.申请方式 (1)栈(satck):由系统自动分配.例如,声明在函数中一个局部变量int b;系统自动在栈中为b开辟空间. (2)堆(heap):需程序员自己申请(调用mall ...
最新文章
- 【人尽其才】颠覆思维☞合理分配工作
- JingRiverOS的自由软件之路
- 网页打印问题,打印设置,打印预览,打印分页,纵打,横打及页面的边距
- java反射的运用_java反射的使用
- atitit.jQuery Validate验证框架详解与ati Validate 设计新特性
- WebAPI(part2)--获取元素
- JAVA_HOME系统环境变量
- 了解jQuery并掌握jQuery对象和DOM对象的区别
- STL之multiset简介
- Java面试的基础题20190000
- 激活mircrosoft office2013
- 注塑模具设计师要懂得的四个概念
- k8s部署微服务项目
- 【无标题】抖音 s_v_web_id
- 科软-信息安全实验2-netfilter实验
- python自动群发邮件_24.python之自动群发邮件(1)
- 多种ubuntu引导修复方法
- cl 编译器环境配置问题
- Flink1.11 读取kafka数据写入hive,未完待续
- 应用深度学习function-loss-optimization 2020.8.24
热门文章
- FastReport数据库连接路径及软件的最终分发数据库路径问题
- 建立一个vs+qt打开系统摄像头的程序
- Javascript第五章history对象第四课
- java合并后求和_用分支/合并框架执行并行求和
- html页面画一个矩形,使用HTML5 canvas绘制一个矩形的方法
- html 网络请求 json数据,写一个json格式API,http请求接收json数据
- java读取mysql配置文件_MySql主从复制,从原理到实践
- MySql学习10-----存储过程和函数
- 零基础学习 Python 之前期准备
- VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别