堆、栈和堆栈的区别

堆(heap):堆是一种经过排序的树形数据结构,每个结点都有一个值。

栈(stack):它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。(PS:颇有砌墙的砖——后来者居上的赶脚。)

1,申请方式

heap:程序员自己申请,并指明大小。

stack:由系统分配。

2,申请效率

原为:

heap:效率较高,速度较快,但程序员无法对其进行控制。

stack:由new分配的内存,相对效率和速度都较低,且容易产生碎片,但由于是程序员自己申请操作,灵活性强,使用方便。

3,存储的数据类型

stack:存储值类型,即存储固定长度的数据。比如:整数、字符、结构、布尔、枚举等。每个程序在执行时都有自己的堆栈,其他程序不能访问该堆栈。

heap:存储引用类型

三、相关名词

1,压栈(进栈、入栈):用push表示,就是把数据放入栈中,从栈顶放入,有先进后出的特点!

2,清栈:清空栈中所有的数据。

3,出栈:用POP表示,它是和压栈相反的概念,即把数据从栈中取出来。出栈时从栈顶取出。

形象化解释:有二层楼,拿着砖头,继续往上盖楼,就是压栈。取下砖头拆楼,硬生生把楼房给弄成平房,就是出栈。然后,要是看这座楼不顺眼,直接给炸了,灰都不剩那种,就叫清栈。

注意问题:压栈:需要考虑是否满栈,比如一座楼根据地基的承受能力,目前高度达到了极限,那么,就不能往上继续盖。

          清栈:需要考虑栈是否为空,空栈,不需要清栈。

          出栈:每次出栈都只能出顶栈。(PS:我在想出栈是不是得留下点东西,要是什么都不留,岂不成了清栈了)

4,堆栈溢出:就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了旧的堆栈数据。 (PS:有点像数组的下标越界问题)

。比如:类、接口、数组等。

原文地址:https://www.cnblogs.com/zhuyeshen/p/12125248.html