对函数的输入分配的低级描述

时间:2013-03-12 14:20:13

标签: c

我想在低级别理解如何为函数提供输入。一旦函数运行会发生什么?例如,请考虑以下事项:

int foo(int t1, int t2)
{  
  Function defintion goes here  
}

然后在代码中

main()
{
  .
  .
  int a= foo(23, 24);
  . 
  .
 }

假设代码编译成功,我们得到一个二进制文件,即与我们的高级源代码对应的.exe文件。我想了解内部函数的输入在什么级别以及双击此.exe文件时究竟发生了什么。单击.exe后会有哪些软件/硬件发挥作用?如果有人能给我一个简短的描述,我将不胜感激。

根据要求

O.S:Windows CPU:Intel Core2Duo

2 个答案:

答案 0 :(得分:1)

就函数调用而言,首先,文字2324被加载到CPU中的特定寄存器(用于函数参数的寄存器)。然后,当函数foo找到时,您的代码会跳转到某个部分。

foo从上述寄存器读取访问t1t2,计算返回值,并将该值存储在另一个寄存器中。然后,foo跳回到main中调用的位置。

Main然后从寄存器中读取foo的返回值,并将该值放入变量x

这是对函数调用发生的事情的高级描述。对于堆栈溢出帖子(但可能不是),更详细的解释可能太多了。

答案 1 :(得分:0)

您需要更加具体地了解编写代码的平台。不同的硬件和软件平台使用不同的ABI,即在调用之间传递参数的方式。

此外,它可能取决于您使用的编译器版本和语言方言。

http://en.wikipedia.org/wiki/X86_calling_conventions http://en.wikipedia.org/wiki/Application_binary_interface

要获得您需要指定的答案:硬件平台,操作系统版本,要使用的编译器以及使用(C / C ++)编写的语言或仅使用调用约定。

差异的例子: 在ARM上,一些参数可以通过寄存器传递,一些参数通过堆栈传递。在x86上,大多数参数都在堆栈上传递(除了C ++方法之外),参数的顺序由语言和使用的约定定义,对齐是标准问题,或者在M-soft,商业规范的情况下