函数参数(“参数”)根本不需要存储。请记住:C 使用按值调用。一个值不需要存储在内存位置,它可以存在于寄存器中,或者它的值可以以某种方式从程序状态中得出。
例如,诸如 strlen() 或 sin() 、 cos() 、 sqrt() 之类的库函数可以在硬件中实现。sin(x)可以通过将一些对应的值存储x
到特殊功能寄存器中,发出特殊功能指令并将结果提取出来来实现。(浮点硬件有时甚至有伪指令以尽可能高的精度表示例如 Pi。永远不会传递 Pi 值,只有指令:“使用 Pi/2”)
即使对于“普通”用户定义的函数,参数也可以通过寄存器传递,多个参数可以组合成一个大寄存器,甚至可以优化。
内联函数最容易看到这一点,它们可以完全消失,因为它们的功能已经与调用者的功能结合在一起。
当函数获取其参数之一的地址时,情况会有所不同(例如,int func(int arg) { int *p = &arg; }
将强制 arg 具有地址),但这种情况相对较少。
WRT 标准:一个 C 函数有一个激活记录。(非标准的人可能会称之为“堆栈框架”)。并且函数的行为就好像参数是其局部变量的一部分,一旦函数返回,它们就会超出范围。他们如何获得他们的价值完全无关紧要,理论上它甚至可以通过消息传递来完成。