c - 函数输入分配的低级描述

标签 c

我想在低层次上了解如何将输入提供给函数。函数运行后到底会发生什么?例如,请考虑以下情况:

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

然后在代码中

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

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

根据要求

操作系统:Windows CPU:英特尔酷睿2双核

最佳答案

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

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

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

这是对函数调用所发生情况的高级描述。更详细的解释可能无法从堆栈溢出帖子中得到(但也许不是)。

关于c - 函数输入分配的低级描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15363797/

相关文章:

c - 如何分配结构体的内存?

C 信号处理错误,发出子父联系

C 函数头文件位置 : . h 或 .c?

c - (gcc) 用于无警告编译的多维数组或双指针

c - 如何将 dma_alloc_attr() 与 DMA_ATTR_NO_KERNEL_MAPPING 一起使用?

c - 为什么快速排序代码会破坏稳定性?

c - 如何使用相同的函数对 C 中的字符串进行 XOR 加扰并再次加扰?

c - 我的代码不起作用。我的 while 循环有问题

c - 重新实现 strlen (C)

c++ - 如何交叉编译具有依赖项的 C++ 库?