发表于:2005-10-20 11:32:00
楼主
堆栈是用来保存局部对象的一段内存区。每个函数都有一个属于自己的栈区来保存局部对象或临时对象。当然,编译器经常会为了提高处理速度而把一些对象放到寄存器中。处理器提供专门的寄存器和指令来操纵堆栈区。
堆栈有两种典型的栈操作,压入和弹出。堆栈是向下增长的,即新压入栈的地址应该比原有对象的地址小。堆栈遵循先进后出的原则。
系统用两个寄存器来表示当前活动的栈,EBP指向活动栈首,ESP指向栈尾。在函数调用前,系统自动记录主调函数的EBP。
编译器编译一个函数时,会进行函数初始化工作:
Push EBP
Mov EBP,ESP;
Sub ESP,ncount;
解释:第一条指令把原来的EBP保存到栈上(记录主调函数的EBP)。第二条指令创建新的活动栈区。第三条指令分配栈区大小。
......