我的理解是C调用约定在调用函数之前将参数放在堆栈上。可以使用private
作为参考(例如EBP
或[EBP + 8]
)通过显式堆栈参数在函数内访问这些参数。
我的问题是,如果可以通过这种方式访问它,为什么需要局部变量? - 函数不能直接使用参数吗?它只适用于函数没有参数但仍初始化局部变量以供内部使用的情况吗?
答案 0 :(得分:3)
通常,函数需要记住的数据多于参数。例如,考虑此函数计算其参数中的设置位数:
int popcount(int k)
{
int count = 0;
while (k != 0) {
k &= k - 1;
count++;
}
return (count);
}
除参数外,我们还需要记住我们看到的位数。因此,需要一个局部变量。