将内存分配给函数(定义或调用)时

Ani*_*kar 8 c c++

将内存分配给函数时.例如:

int doubleMe(int smthng){ 
int dbl = 2*smthng; //line 2
return dbl; 
} 

void main(){ 
int var; 
printf("The double of var is: %d",doubleMe(var)); //line 8
}
Run Code Online (Sandbox Code Playgroud)

何时将内存分配给变量dbl

  • 何时定义(第2行)(编译时)
  • 或调用函数时(第8行)(运行时)

我相信它是在堆栈中调用函数(运行时)时分配的.当函数退出时释放,是吗?如果有人能够更好地解释它会很棒.

这个问题看起来很相似但不完全!

Vla*_*cow 9

编译器在定义函数时生成对象代码.生成的代码包含在堆栈中为函数局部变量分配内存的指令,或者它可以使用寄存器来容纳它们.

在调用函数的地方,编译器生成函数调用的目标代码和相应的指令以推送堆栈上的参数.此时,编译器可能不知道如何定义函数以及是否定义了函数,因为它的定义可以在某个其他模块或库中.

考虑到即使您自己不使用函数说明符,编译器也可能内联函数inline.在这种情况下,它会将函数定义放在调用函数的位置.