日期:2014-05-16  浏览次数:20782 次

函数调用
各位大神们,小弟问一下,c语言在函数调用前后系统都做了什么操作
例子:
int sum(int sum )
{
  int i;
  for(i = 0; i < 10;i++)
    sum += i;
  return 0;
}
int main(int argv,int **argc)
{
   int sun;
   printf("sum = %d\n",sum);
   return 0;
}
这个简单的程序在main函数调用 sum()函数的时候系统都做了什么?还望相告!!

------解决方案--------------------
你把这段代码编译成汇编代码就明白了,函数调用时会进行堆栈的保护,退出时对资源释放.
------解决方案--------------------
程序有问题吧,sum没有调用,只是输出了函数的地址。
简单来说,函数调用前会将参数压栈,将返回地址压栈,然后执行跳转,跳到函数代码的起始位置,然后参数出栈,执行函数代码,完成后返回值压栈,根据执行前的返回地址跳转,继续执行
------解决方案--------------------
楼主可以用objdump -d <程序名>
看看反汇编的内容

循环要高一些