一、内存区域划分
执行程序时,
内存会申请一片空间,
大概能划分成三个区域:
栈区
局部变量
函数形参
堆区
动态开辟的内存
如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里。

本文介绍了程序执行时内存的三个主要区域:栈区、堆区和静态区,详细阐述了栈区内存如何分配给局部变量和函数参数,以及函数调用时的传参顺序。以一个简单的Add函数调用为例,展示了从main函数到Add函数执行的内存分配过程,帮助理解程序执行的内存管理。
2386

被折叠的 条评论
为什么被折叠?



