猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
您好,请问堆(heap)和栈(Stack)的区别是什么?麻烦帮忙解释一下
栈很好理解,但是堆是什么?难道用malloc(),free()分配的就叫堆?这东西跟内存管理分页机制又有什么联系?
慕尼黑8549860
浏览 328
回答 2
2回答
跃然一笑
将堆跟栈放在一起将是因为两者都是存储数据的方式。区别如下:一、主体不同1、堆:是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。2、栈:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。二、特点不同1、堆:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。2、栈:是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶。三、作用不同1、堆:堆是非线性数据结构,相当于一维数组,有两个直接后继。2、栈:可以用来在函数调用的时候存储断点,做递归时要用到栈。
0
0
0
梵蒂冈之花
1、堆、堆栈、栈堆和栈都和编译、编程有关。但很多老师在讲具体的程序设计语言时,重点在语法。将它们跳过,或简单地称其为堆栈。堆栈是内存的逻辑层面的东西。在谈论上层应用时,经常忽略它们。久而久之就出现了“堆栈”这个混乱的术语。但这个术语已经存在,大多数人提到堆栈时,意思是“栈”,所以它成为约定俗成,那么你只能接受。堆是heap。栈是stack。堆栈就是栈。2、进程、线程 与 堆、栈现在是多任务系统。每个进程是资源(不含处理器资源)分配的基本单位。每个进程含若干线程。线程是调度执行的基本单位。同一个进程的多个线程可以共享所属进程的资源。程序员可以进行同步控制(多线程编程)。每个进程有一个或几个堆。这要看不同的OS了。程序员要在堆中分配/释放空间,需要malloc free这样的显式操作。java中的new操作,建立对象,其实也间接执行了malloc这样的操作。对象的回收其实也要执行free。不过是包装了一下而已。每个线程有一个私有资源,那就是栈。函数调用时,要把返回地址和参数入栈。被调函数执行时,要把参数取出来,赋给形参。被调函数执行完后还要把返回地址取出来,跳回去。栈是自动实现的,不需要程序员干预。(因为编译器实现了)。局部变量也位于栈。3、内存管理分页机制Windows / Linux采用段页式。但这只是内存管理方法。跟堆栈是两回事啊。并不矛盾。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
OpenStack
openstack是什么?
1 回答
如何安装OpenStack Manila?
1 回答
Nginx
关于PHP怎么在站点根目录部署新项目的问题?
1 回答
关于nginx使用路径重定向至服务的问题?
2 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续