一、内存区域划分
执行程序时,
内存会申请一片空间,
大概能划分成三个区域:
栈区
局部变量
函数形参
堆区
动态开辟的内存
如malloc,calloc
静态区
全局变量
static修饰的变量
二、函数执行过程
以下述代码为例:
int Add(int x, int y)
{
int z = 0;
z = = x + y;
return z;
}
int main()
{
int a = 10;
int b = 20;
int ret = 0;
ret = Add(a, b);
return 0;
}
我们把栈区放大:
首先,栈区的底部分配一块空间给main,
然后在main区域里,从底到上,依次为局部变量a,b,ret分配空间,如下图:
第二步,我们要进行Add函数的调用,需要传参。
Add(a,b)
在绝大部分编译器里,会先传b,再传a,从右向左传。
在main函数区域上面,分配两块空间,分别给b`和a`。
实际上,
b`就是y,
a`就是x。
第三步,我们再分配一块空间给Add函数,
再底部分配一块空间给z,
然后将x,y的结果相加,放进z里。