c - 函数的存储分配

标签 c

当我定义这样的函数时:

void foo(int a, int b) {}
  1. 何时分配存储空间?
  2. 此存储分配在哪里

最佳答案

如果您的问题类似于“编译器完成工作后该函数是什么以及在哪里”:

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

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

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

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

关于c - 函数的存储分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26299618/

相关文章:

c - 如何从 inode 创建 struct vfsmount?

c - 嵌套开关: why does the second switch command not accept an input?

c - 使用 realloc 时获取(核心转储)

c - 在代码块中调试头文件

c - 如何使用数组 ("right"和 "left"(在我的情况下)的返回值从一个函数( "extract")到另一个函数 ("BinToDec")?

c - C 中的 sizeof 返回类型

c - 从两个不同的值打印输出?

C |两组阵列比较

c - gcc sizeof float _Imaginary

c - 查找字符串的最后一个字母