函数的调用过程(栈帧)

今天学完了,函数的调用过程,来和大家分享一下自己的成果,欲戴王冠,比承其重。
首先来看一下演示的代码,整个过程实在vs2008实现的 。
函数的调用过程(栈帧)
在演示之前我们如果打开调用堆栈的话,会发先main函数也被其他函数调用了,其实它被_mmainCRTStartup调用,_mmainCRTStartup又被mainCRTStartup调用。
我们知道,每次函数调用都是一个过程,而每次调用都要为函数开辟栈空间,用于函数调用过程中的临时变量的保存,现场保护,而这块空间呢,我们称之为函数栈帧。
而要了解函数栈帧之前呢,我们先要了解esp和ebp这两个寄存器,在函数调用过程中,这两个寄存器维护栈空间的栈顶和栈底。

例如,调用main 函数时,栈帧的维护。
函数的调用过程(栈帧)

ebp存放了指向函数栈底的地址;esp存放了指向函数栈顶空间的地址。
要研究函数的调用过程,就必须研究对应的汇编代码。
函数的调用过程(栈帧)

在实际过程中,a,b的形参的创建是先创建b,在创建的a,是从右向左创建的,这个是取决与不同语言的调用约定。