功能的存储分配

时间:2014-10-10 12:37:11

标签: c

当我定义这样的函数时:

void foo(int a, int b) {}
  1. 何时是分配的存储空间?
  2. 这个存储分配了什么?

3 个答案:

答案 0 :(得分:4)

如果您的问题类似于“在编译器完成其工作后该函数的位置和位置”:

编译器将此定义转换为汇编代码,然后将其转换为二进制可执行代码。它不在您的内存中(因此没有“存储分配”),如果您调用它,则它位于编译器输出的可执行文件中(a.out gcc在linux上没有任何其他参数而不是输入文件,或者是Windows上的.exe文件。

编辑:更进一步,因为你的函数声明了两个参数:

编译器生成二进制可执行文件,这是您的函数。现在,可执行文件(在执行时)将为这些参数分配内存(堆栈中的几个字节用于两个int)。

换句话说:在最终的可执行文件中,您的函数定义只是CPU可以执行的一堆指令。但是,这些指令会分配内存以存储两个参数。

答案 1 :(得分:0)

在函数调用时,变量在堆栈上分配。它被称为该函数的框架

答案 2 :(得分:0)

在为32位计算机调用函数之前,函数的参数将被压入堆栈。在64位机器上,它们将通过寄存器传递(我认为前六个)。