原创

JavaScript之堆栈空间分配区别


堆栈空间分配区别

  • 计算机中有一个内存,内存分为堆和栈。两者都是内存,但存放位置不同
  1. 栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈 ——— 存放简单数据类型存放的是值且互不干扰image-20230922154232141
  2. 堆(操作系统)存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收 ———— 里面存放引用数据类型

image-20230922154615108

注: 理论上JS中没有堆栈概念,但JS是借鉴其他语言来的,只是通过堆栈方式,更容易理解代码一些执行方式,便于学习其他语言

image-20230922153929279

分析:

  1. 假设let num = 10,这是简单数据类型,放在栈里
    • 在栈里开辟一个新的空间 把10这个值存进去(明确的值直接放栈里
    • 10这个空间(变量)有个名字即num,这时可以通过num找到栈里面的这个空间
  2. 假设let obj = {age: 18},这是对象,首先栈里存放地址值,其次堆里存放数据内容,通过地址值指向堆里的数据内容
    • 首先在栈里也开辟了空间,但这时栈里放的不是age:18,不是值,而是存放地址(比如0x112233是一个地址值,这是它们系统内部有个自己专门的编号)
    • 而0x112233这个变量名为obj,通过obj找到栈里存放的是地址,而这个地址值指向堆里的数据(相当于obj变量有个指针指向堆里的数据
    • 所以堆里再开辟一个空间存放对象age:18
  • 作者:管理员(联系作者)
  • 发表时间:2023-12-20 21:42
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 公众号转载:请在文末添加作者公众号二维码
  • 评论