是否需要局部变量?
Are local variables necessary?
我的理解是 C 调用约定在调用函数之前将参数放在堆栈上。可以使用 EBP
作为引用(例如 [EBP + 8]
或 [EBP + 12]
)通过显式堆栈参数在函数内访问这些参数。
我的问题是如果可以这样访问,为什么需要局部变量? - 函数不能直接使用参数吗?是否只是针对函数没有参数,但仍然初始化局部变量供内部使用的情况?
很多时候,函数需要记住比参数更多的数据。例如,考虑这个函数计算其参数中设置位的数量:
int popcount(int k)
{
int count = 0;
while (k != 0) {
k &= k - 1;
count++;
}
return (count);
}
除了参数,我们还需要记住我们看到了多少位。因此,需要一个局部变量。
我的理解是 C 调用约定在调用函数之前将参数放在堆栈上。可以使用 EBP
作为引用(例如 [EBP + 8]
或 [EBP + 12]
)通过显式堆栈参数在函数内访问这些参数。
我的问题是如果可以这样访问,为什么需要局部变量? - 函数不能直接使用参数吗?是否只是针对函数没有参数,但仍然初始化局部变量供内部使用的情况?
很多时候,函数需要记住比参数更多的数据。例如,考虑这个函数计算其参数中设置位的数量:
int popcount(int k)
{
int count = 0;
while (k != 0) {
k &= k - 1;
count++;
}
return (count);
}
除了参数,我们还需要记住我们看到了多少位。因此,需要一个局部变量。