当我定义这样的函数时:
void foo(int a, int b) {}
答案 0 :(得分:4)
如果您的问题类似于“在编译器完成其工作后该函数的位置和位置”:
编译器将此定义转换为汇编代码,然后将其转换为二进制可执行代码。它不在您的内存中(因此没有“存储分配”),如果您调用它,则它位于编译器输出的可执行文件中(a.out
gcc在linux上没有任何其他参数而不是输入文件,或者是Windows上的.exe
文件。
编辑:更进一步,因为你的函数声明了两个参数:
编译器生成二进制可执行文件,这是您的函数。现在,可执行文件(在执行时)将为这些参数分配内存(堆栈中的几个字节用于两个int
)。
换句话说:在最终的可执行文件中,您的函数定义只是CPU可以执行的一堆指令。但是,这些指令会分配内存以存储两个参数。
答案 1 :(得分:0)
在函数调用时,变量在堆栈上分配。它被称为该函数的框架。
答案 2 :(得分:0)
在为32位计算机调用函数之前,函数的参数将被压入堆栈。在64位机器上,它们将通过寄存器传递(我认为前六个)。