堆栈详解

内存堆栈和数据结构堆栈

1、内存堆栈

内存管理中的堆栈,其实应该分为“堆heap”和“栈stack”两个部分,即heap采用了堆的数据结构,栈采用了栈的数据结构,在内存管理中发挥不同的作用。

以变量存储为例:

变量的引用存储在栈区中 该引用所指向的变量的值则存储在堆区中

2、数据结构堆栈

数据结构中的stack我们叫做堆栈,其实是两种不同的数据结构,即堆和栈,堆实质上是满足一定性质的完全二叉树,而栈是“后进先出”的一种线性数据结构,它们与队列queue数据结构相对,queue是先进先出的线性数据结构,它们都是数据结构中的概念,或者可以叫做逻辑技术,与平台,语言等无关;

3、堆栈空间分配区别:

1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;

2、堆(操作系统): 一般由程序员分配(申请一块内存空间)释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

4、堆栈缓存方式区别:

1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;

2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

5、堆栈数据结构区别:

堆(数据结构):堆可以被看成是一棵树,如:堆排序;

栈(数据结构):一种先进后出的数据结构。

堆,栈,空间在哪里使用(以C 和 Java为例)

1.堆使用:c语言:malloc ,calloc 操作(目前只知道这两个)

Java:堆空间由Java运行时用于为Objects和JRE类分配内存。每当我们创建(new)任何对象时,它总是在堆空间中创建。垃圾收集在堆内存上运行,以释放没有任何引用的对象使用的内存。在堆空间中创建的任何对象都具有全局访问权限,可以从应用程序的任何位置引用.

2 栈使用:c语言:局部变量,存放函数的参数名,如int a;

Java : 栈内存用于执行线程。栈内存包含生命周期短的方法特定值及以及对从该方法引用的堆中其他对象的引用。用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

点赞

当前页面评论已关闭。

隐藏
变装