首先在内存中,分为三大区域,栈区,堆区,以及静态区。栈区中存放有局部变量,形参,以及函数调用所开辟的空间。堆区主要是关于动态内存的分配。静态区主要是存放全局变量和静态变量。
关于参数压栈的问题是在结构体传参这个地方提出的,c语言中函数传参时,参数是需要压栈的。如果传一个结构体对象结构体过大,参数压栈的系统开销过大,性能就会下降。涉及的就是函数栈帧的创建和销毁。
下面引用以简单代码为例
#include<stdio.h>
int add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int a = 20, b = 10;
int ret = 0;
ret = add(a, b);
return 0;
}
代码在内存中如图抽象
b传参给y时相当于在栈区中拷贝了一份b。c也是一样的道理。这只是给函数传一个变量,如果b变为结构体,就会因为结构体过大而造成栈区内存消耗多,导致性能下降。所以我们在结构体传参时通常采用传地址的方法。