1.栈
栈是一种特殊的数据。(与队列相反的存储方式和操作方式),即是一种只能在一端进行插入和删除操作的特殊线性表。
(引用他人言论) 它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
栈有很多自己的特性,它具有记忆功能,对栈的插入与删除操作中,不需要改变栈底指针;而且栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。因此栈作用就是用来保持栈帧的活动记录(即函数调用)。下面有这样一幅图(源自Unix环境高级编程第七章):
对于一个栈来说,寄存器ebp和esp分别指向指向系统栈最上面一个栈帧的底部和栈帧顶部(实际上也是栈的顶部)。上图可以清晰的看到栈位置在用户空间的最顶部(从0xc0000000开始向下增长),下于堆对接,实际上堆与栈之间有很大的未使用空间,这里不做详述。
2.栈帧
(以上内容摘抄自http://blog.youkuaiyun.com/ylyuanlu/article/details/18947951)