2 回答

TA贡献1826条经验 获得超6个赞
将堆跟栈放在一起将是因为两者都是存储数据的方式。区别如下:
一、主体不同
1、堆:是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。
2、栈:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。
二、特点不同
1、堆:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。
2、栈:是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶。
三、作用不同
1、堆:堆是非线性数据结构,相当于一维数组,有两个直接后继。
2、栈:可以用来在函数调用的时候存储断点,做递归时要用到栈。

TA贡献1900条经验 获得超5个赞
1、堆、堆栈、栈
堆和栈都和编译、编程有关。但很多老师在讲具体的程序设计语言时,重点在语法。将它们跳过,或简单地称其为堆栈。堆栈是内存的逻辑层面的东西。在谈论上层应用时,经常忽略它们。久而久之就出现了“堆栈”这个混乱的术语。但这个术语已经存在,大多数人提到堆栈时,意思是“栈”,所以它成为约定俗成,那么你只能接受。堆是heap。栈是stack。堆栈就是栈。
2、进程、线程 与 堆、栈
现在是多任务系统。每个进程是资源(不含处理器资源)分配的基本单位。每个进程含若干线程。线程是调度执行的基本单位。同一个进程的多个线程可以共享所属进程的资源。程序员可以进行同步控制(多线程编程)。
每个进程有一个或几个堆。这要看不同的OS了。程序员要在堆中分配/释放空间,需要malloc free这样的显式操作。java中的new操作,建立对象,其实也间接执行了malloc这样的操作。对象的回收其实也要执行free。不过是包装了一下而已。
每个线程有一个私有资源,那就是栈。函数调用时,要把返回地址和参数入栈。被调函数执行时,要把参数取出来,赋给形参。被调函数执行完后还要把返回地址取出来,跳回去。栈是自动实现的,不需要程序员干预。(因为编译器实现了)。局部变量也位于栈。
3、内存管理分页机制
Windows / Linux采用段页式。但这只是内存管理方法。跟堆栈是两回事啊。并不矛盾。
- 2 回答
- 0 关注
- 327 浏览
添加回答
举报