当我定义这样的函数时:
void foo(int a, int b) {}
- 何时分配存储空间?
- 此存储分配在哪里?
最佳答案
如果您的问题类似于“编译器完成工作后该函数是什么以及在哪里”:
编译器将此定义转换为汇编代码,然后将其转换为二进制可执行文件。它不在您的内存中(因此没有“存储分配”),而是在编译器输出的可执行文件中(a.out
如果您在 Linux 上调用 gcc,除了输入文件之外没有任何其他参数,或者在 Windows 上调用 .exe
文件)。
编辑:再进一步,因为您的函数声明了两个参数:
编译器生成一个二进制可执行文件,这就是您的函数所在的位置。现在,可执行文件(执行时)将为这些参数分配内存(堆栈上的几个字节用于两个 int
)。
换句话说:在最终的可执行文件中,函数定义只是 CPU 可以执行的一堆指令。然而,这些指令分配内存以存储两个参数。
关于c - 函数的存储分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26299618/