c语言函数执行过程(来源老师讲课)
int fun(int a, int b);
int m=10;
int main()
{
int i=4;
int j=5;
m = fun(i,j);
return 0;
}
int fun(int a, int b)
{
int c=0;
c = a+b;
return c;
}
C程序运行的核心是函数的执行和调用。
接下来将介绍内存中函数调用的基本情景,指令如何驱动数据压栈、清栈。
首先我们介绍函数调用的内存中的三个区域(如上图):
代码区
代码区装载了这个程序所对应的机器指令
程序的执行就靠这些指令来驱动
静态数据区
装载了全局变量m的数值10
后面程序的执行会改变这里的值
动态数据区
初始什么都没有,因为只有程序执行后,在指令的驱动下,这个区域才会产生数据。
压栈、清栈的工作就是在这个区域完成的。
程序的执行会导致动态、静态数据区中数据的变化,知道执行完毕。
CPU中有三个寄存器,分别是eip、ebp、esp
eip永远指向代码区将要执行的下一