如果未明确定义,函数参数是否为本地地址空间?

时间:2015-02-23 09:55:10

标签: c x86 stack

这是一个简单的程序:

simple.c

int inverse(int input)
{
  if( input == 0 )
    return 1;
  else
    return 0;
}

int main()
{
  inverse(1);
  return 0;
}

我的问题是:

inverse()是否会推送名为

的参数的本地副本
int input

或者只是每次访问时都会引用参数?

3 个答案:

答案 0 :(得分:3)

请记住。 int input定义是函数inverse()的本地定义。因此,每次调用inverse()时,input的堆栈空间都是单独分配的,一旦inverse()完成执行,就不会存在input变量。

*没有任何编译器优化

答案 1 :(得分:1)

函数inverse的调用者提供所有参数的值。函数inverse然后将这些值转换为局部变量,就像您声明了

一样
int input;

在函数内部。

答案 2 :(得分:1)

在函数或块内声明的变量称为局部变量。它们只能由该函数或代码块中的语句使用。本地变量不为自己的函数所知。

在这种情况下,int input是一个局部变量。

执行完成后,将不会引用变量int input。 @ Sourav关于编译器优化的提示+1。