函数调用过程------栈桢ide
例:剖析“比较两个数之间的大小关系,并把较大数返回”的调用原理:函数
int Max(int x, int y) { int z = 0; if (x > y) z = x; else z = y; return z; } int main() { int a = 10; int b = 20; int c = 0; c = Max(a, b); printf( "%d\n", c); system( "pause"); return 0; }
分析:url
图一:spa
main函数是被mainCRTStartup调用的,因此main函数栈桢的ebp+1存放的是mainCRTStartup栈桢ebp:3d
观察上图mainCRTStartup 的esp=0018ff4c ebp=0018ff88orm
图二:blog
下面这幅图是mainCRTStartup调用main的过程,以及main函数栈桢的建立:内存
图二:get
这幅图是Max函数栈桢的建立过程:编译器
图三:
这幅图是Max函数调用完成后,Max栈桢的销毁过程:
整个程序在执行的过程当中,函数的栈桢能够抽象以下图,注意,栈是由高地址向低地址走的:
由于栈要对齐,因此编译器分配的内存若是多了,则就会被浪费。