什么是堆和栈啊?

若是问数据结构里的堆和栈,那么:
都是数据结构。堆是父节点大于(或小于)子节点的二叉树。

栈是一个先进后出(或说后来居上?)的“队列”。

若是问操作系统的知识,那么:
堆是指由操作系统管理分配、由应用程序请求的内存,具有运行时分配(动态分配)的特点。

栈是操作系统维护的上面说的“栈”,不过是特指,通常每个线程分配一个,函数调用时用到的参数和返回地址通常存放在上面(当然也有不这样做的语言,比如老Fortran),也用来存放函数局部变量。也是动态分配。

你可以用这个比喻去理解:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

堆和栈的区别是啥?

堆和栈的区别:一.堆栈空间分配区别:
1.栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2.堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
二.堆栈缓存方式区别:
1.栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
2.堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
三.堆栈数据结构区别:
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。

扩展资料:
堆支持以下的基本:
1.build:建立一个空堆;
2.insert:向堆中插入一个新元素;
3.update:将新元素提升使其符合堆的性质;
4.get:获取当前堆顶元素的值;
5.delete:删除堆顶元素;
6.heapify:使删除堆顶元素的堆再次成为堆。
某些堆实现还支持其他的一些操作,如斐波那契堆支持检查一个堆中是否存在某个元素。
栈的基本算法
1.进栈(PUSH)算法
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
2.退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
参考资料:百度百科:堆
百度百科:栈

简单地说,栈是属于进程管理的,大小相对固定,规模较小,一旦操作系统为程序分配了栈后就不管了,操作系统将其看做进程的一部分,栈的性质是先进后出,后进先出;堆属于系统维护的,进程可以申请的额外内存空间,访问方式是自由的(相对于栈的先进后出)。

稍微深入点说,栈是由系统在加载程序时给进程分配的一块区域,提供存放栈数据,一般定义的变量都会存在栈区,函数调用以及数据传递和返回、递归、嵌套循环,文件夹等树状层次结构的遍历、表达式的解析都会用到栈区。栈的大小由编译器决定,也可以在IDE(集成开发环境,比如VC, VS,VB或任何编程工具)中设定,编译好的程序包含了栈空间大小的参数,当被操作系统加载时由操作系统一起分配给程序。当程序结束时栈区与进程空间一起被回收释放。

所以,如果定义的数据超过栈的空间程序就会发生溢出而崩溃,编译器不负责检查,因此大容量数据不要分配在栈上。在C++中,应该使用new关键词,用new分配的对象或内存都是在堆上,堆是系统维护的内存空间,也可理解为操作系统中看到的未使用的空间,当执行new的时候就是程序向操作系统申请额外空间,因此new也叫动态分配内存。系统会根据需求大小从未使用的空间中划一块给程序使用,并对该空间进行注册管理,以便当程序结束时释放该空间(假如程序没有主动申请释放)。所以用new创建的空间在使用完了后要及时申请释放(delete 关键词),如果不释放,在程序运行期间如果不断的new大内存,最终也会将整个可用内存用完,导致系统崩溃,当然,如今的操作系统比以前强壮得多,当发生内存用完导致崩溃时,操作系统会干预,直接down掉程序禁止运行下去并回收所有所占空间。


什么是堆栈及堆栈的作用是什么
要点:堆,队列优先,先进先出 。栈,先进后出(First-In\/Last-Out)。1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与...

请简单通俗易懂的解释一下在Java中什么叫堆 什么叫栈 谢谢
什么堆什么栈都是一样的,基本作用也一样。java中可以认为,栈用来存放局部变量的。public void fun(){ int i=0; \/\/i 是一个局部变量,存放在栈里面的 Object obj = new Objec(); \/\/obj 是一个对象应用,同样也是一个局部变量,存放在站里面的,但是obj指向的对象,在存在堆中 } ...

堆和栈的区别
2、生长方式不同 堆是向高地址扩展也就是常说的向上生长。是不连续的内存区域。栈是向低地址扩展也就是常说的向下生长。是连续的内存区域。3、空间大小不同 堆的大小可以高达4G在32位Linux里系统有效的虚拟内存也有3.2G。栈的大小一般是1M ~10M不等(和堆相差很多)。4、内存速率不同 栈的内存...

堆栈的定义?
data段:存放在编译阶段(而非运行时)就能确定的数据,可读可写 就是通常所说的静态存储区,赋了初值的全局变量和静态变量存放在这个区域,常量也存放在这个区域 bss段:定义而没有赋初值的全局变量和静态变量,放在这个区域 这个够不够清楚呢?堆栈就是栈的简称。堆和栈的区别 一、预备知识—程序的内存...

堆和栈有什么区别
堆是一种经过排序的树形数据结构,每个结点都有一个值,堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意。栈是后进先出性质的数据结构。此外,栈:在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令(函数...

什么叫 栈和堆?
就是个内存空间,如箱子,栈 和 堆遵循先进后出的原则 如往箱子里放出,最后放进去的一本最先拿出来,最先放进去的一本最后拿出来

堆(heap)和栈(Stack)的区别是什么?为什么平时都把堆栈放在一起讲?
将堆跟栈放在一起将是因为两者都是存储数据的方式。区别如下:一、主体不同 1、堆:是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。2、栈:又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。二、特点不同 1、堆:堆中某...

什么是堆栈?堆栈有何作用?
堆栈其实是数据结果中的两个概念 ,是存放数据的方式,堆:顺序随意;栈:后进先出(Last-In\/First-Out)。要说用处,那就是在写代码的时候,有时数据存取肯定是要有规定的顺序的,这个是你自己规定的,然后按照你所写程序的用处的特点来用堆还是栈还是队列之类的顺序 ...

栈和堆的概念以及优缺点
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收...

堆和栈有什么区别
堆和栈的区别主要有五大点,分别是:1、申请方式的不同。栈由系统自动分配,而堆是人为申请开辟;2、申请大小的不同。栈获得的空间较小,而堆获得的空间较大;3、申请效率的不同。栈由系统自动分配,速度较快,而堆一般速度比较慢;4、存储内容的不同。栈在函数调用时,函数调用语句的下一条可执行语句的...

字意查询