数据结构中的堆和内存中的堆是两个完全不同的概念。它们除了名字一样没有什么必然的联系。就跟苹果一样,一个是水果一个是品牌。前者是组织数据的一种手段(或者叫工具),后者只是指明数据存储在哪种内存区之上。
一、堆内存和数据结构堆之间的关系
数据结构中的堆和内存中的堆是两个完全不同的概念。它们除了名字一样没有什么必然的联系。就跟苹果一样,一个是水果一个是品牌。前者是组织数据的一种手段(或者叫工具),后者只是指明数据存储在哪种内存区之上。
1、内存堆栈
内存管理中的堆栈,其实应该分为“堆heap”和“栈stack”两个部分,即heap采用了堆的数据结构,栈采用了栈的数据结构,在内存管理中发挥不同的作用。
以变量存储为例:
变量的引用存储在栈区中
该引用所指向的变量的值则存储在堆区中
2、数据结构堆栈
数据结构中的stack我们叫做堆栈,其实是两种不同的数据结构,即堆和栈,堆实质上是满足一定性质的完全二叉树,而栈是“后进先出”的一种线性数据结构,它们与队列queue数据结构相对,queue是先进先出的线性数据结构,它们都是数据结构中的概念,或者可以叫做逻辑技术,与平台,语言等无关;
3、堆栈空间分配区别
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
堆(操作系统): 一般由程序员分配(申请一块内存空间)释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
4、堆栈缓存方式区别
栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
5、堆栈数据结构区别
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。