关于“堆栈”的含义及理解

关于“堆栈”的含义及理解_第1张图片

 其实平时所讲的堆栈一般都指栈,为了好听我们叫它堆栈==

1.什么是堆栈?

堆栈是一段连续的存储器空间,主要有两个动作:推入push和取出pull,遵循先入后出,后入先出原则,堆栈可以用来完成参数传递和返回值的传递(函数调用),也可以用来保存局部变量、寄存器的值,典型用处是中断,保存案发现场(函数执行断点)。

关于“堆栈”的含义及理解_第2张图片

关于“堆栈”的含义及理解_第3张图片 

:栈由操作系统自动分配释放 ,用于存放函数的参数值、局部变量、函数返回地址、寄存器内容等。函数中定义的局部变量按照先后定义的顺序依次压入栈中(从高地址开始放),栈中存储的数据的生命周期随着函数的执行完成而结束。栈的效率比较高。

:由开发人员分配和释放(由malloc()函数申请,free()函数释放), 也因此容易造成大量的内存碎片,效率较低。若开发人员不释放,程序结束时由 OS 回收。堆的内存地址生长方向与栈相反,由低到高,但需要注意的是,后申请的内存空间并不一定在先申请的内存空间的后面,因为先申请的内存空间一旦被释放,后申请的内存空间则会利用先前被释放的内存,从而导致先后分配的内存空间在地址上不存在先后关系。堆中存储的数据若没有被释放,则其生命周期等于程序的生命周期。

 

2.什么是堆栈溢出?

存放地址时从高地址开始存放(瓶底),当存放不下了,就从瓶口溢出了。

存放的过程也可以看做,最开始栈顶和栈底是重合的,每存进来一个数据,栈顶就往上移一格。

cube里:

关于“堆栈”的含义及理解_第4张图片

 大概就理解了这些==以后如果有学到其他的再进行补充======================

你可能感兴趣的:(大数据)