• 【js重学系列】栈和堆


    栈和堆

      1. 栈 (计算机术语)
        一种先进后出的数据结构。
        
         
      2. ```
         栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
      
      1. 引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。
        栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
        栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为先进后出表
        
      1. 堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。
        
    1. 栈内存 堆内存

      1. 1. 在js引擎中对变量的存储主要有两种位置,**堆内存和栈内存**。
        2. 基本数据类型的变量名和数据是直接存在"快速内存"(栈内存)中
        3. 复合数据类型(对象和数组)的存储分两个部分:实际数据存在"慢速内存"(堆内存)中,栈内存中只存变量名和数据在堆内存中的位置(地址)
        4. **栈内存**主要用于存储各种**基本类型的**变量,包括Boolean、Number、String、Undefined、Null,以及对象变量的**指针**
        5. 堆内存主要负责像对象Object这种变量类型的存储
        
      2. 内存的使用和分配
        堆是动态分配内存,内存大小不一,也不会自动释放。
        栈是自动分配相对固定大小的内存空间,并由系统自动释放。
        
        

    这里先说两个概念:1、堆(heap)2、栈(stack)
    堆 是堆内存的简称。
    栈 是栈内存的简称。
    说到堆栈,我们讲的就是内存的使用和分配了,没有寄存器的事,也没有硬盘的事。
    各种语言在处理堆栈的原理上都大同小异。堆是动态分配内存,内存大小不一,也不会自动释放。栈是自动分配相对固定大小的内存空间,并由系统自动释放。

      javascript的基本类型就5种:Undefined、Null、Boolean、Number和String,它们都是直接按值存储在栈中的,每种类型的数据占用的内存空间的大小是确定的,并由系统自动分配和自动释放。这样带来的好处就是,内存可以及时得到回收,相对于堆来说,更加容易管理内存空间。
      
      javascript中其他类型的数据被称为引用类型的数据 : 如对象(Object)、数组(Array)、函数(Function) …,它们是通过拷贝和new出来的,这样的数据存储于堆中。其实,说存储于堆中,也不太准确,因为,引用类型的数据的地址指针是存储于栈中的,当我们想要访问引用类型的值的时候,需要先从栈中获得对象的地址指针,然后,在通过地址指针找到堆中的所需要的数据。
      
      说来也是形象,栈,线性结构,后进先出,便于管理。堆,一个混沌,杂乱无章,方便存储和开辟内存空间
      ```
    
    1. https://www.cnblogs.com/baoshuyan66/p/13071313.html

    2. https://blog.csdn.net/sinat_15951543/article/details/79228675

  • 相关阅读:
    springmvc实现文件上传
    springmvc乱码及restful
    springmvc数据的处理
    springmvc跳转方式
    controller配置
    SpringMVC Annotation
    SpringMVC基本包
    第一章 面向对象软件工程与UML
    Oracle数据库之PL/SQL程序基础设计
    thinkphp5 给CSS JS 添加版本号
  • 原文地址:https://www.cnblogs.com/ycyc123/p/14330822.html
Copyright © 2020-2023  润新知