Stack笔记

数据结构中的Stack是一组数据的存取方式,后进先出 LIFO  Last In First out

主要有以下几类操作:

Stack笔记_第1张图片

push 在顶层加入数据;pop 返回并移除顶层数据;top 返回顶层数据;isempty 返回一个布尔值,标识当前stack是否为空stack

call stack 指的是程序代码实现中函数、方法之间相互调用的顺序形成的调用栈。

本质是内存中存放成员变量 局部变量等基本数据类型的空间,堆内存一般存放的是引用类型,在栈内存中存在一个变量,其值记录着该堆内存的地址作为引用,指向该实例,方便后续调用、处理。每一个线程一个stack,而进程则是共享一个heap,stack是线程独占的,heap是进程内所有线程共享的。一个线程创建时,其stack是固定的,一旦程序执行过程中,其stack数据超过该栈大小,发生stack overflow,而heap堆大小则是不固定的,可以申请。但由于一个线程执行完毕后,相应的stack数据会被释放,对应的所指向的堆内存数据可能不存在引用,即被称之为垃圾,将在垃圾回收环节被回收,如果不回收则可能会存在内存泄露的可能性。

jvm里面说一个线程对应一个虚拟机栈,而堆是针对的整个虚拟机的运行过程中的

stack内变量的分配速度会比heap快很多,只需要修改sp寄存器,heap内分配需要调用malloc(malloc调用heap分配实现的,而不是heap分配调用malloc。)。stack的寻址也会比heap快,通过sp/fp寄存器间接寻址。

你可能感兴趣的:(Stack笔记)