参数变量存储在内存中的哪个位置?

我正在用C编写一些代码,当遇到一个方法时,我想知道参数变量存储在内存中的哪个位置。 我知道以下内容:

全局变量 – >存储在静态代码部分

静态可变 – >

局部自动变量(内部方法) – >存储在堆栈中

本地静态变量 – >存储在堆栈中

本地const变量 – >存储在堆栈中

假设我的假设是正确的。

但是参数变量存储在哪里? ex:int *(int x,char * c);

谢谢!

编辑:我知道当我malloc的东西,它被放在堆上,但是说我取消引用指针以获取指针位置的值,是否也存储在堆中或者现在它是否在堆栈中?

它取决于许多不同的东西, 调用约定是要调查的主要内容。 这个x86页面涉及各种调用约定以及如何将参数传递给函数, 这个引用遍及各种C ++编译器和平台使用的调用约定。 通常,它要么位于通过寄存器的堆栈中。

我对C ++(嵌套)函数调用指令的回答- 寄存器也是相关的,并且有一些更有用的链接。

C,ITYM函数中没有方法。

全局变量以及静态变量存储在.data或.bss部分中(以下称为“数据段”)。

局部静态变量也存储在数据段中。

函数的参数值也存储在堆栈中,在返回地址之前立即按下。

生活在堆栈中的所有东西(局部变量,参数等)也可以存在于寄存器中。 这就是为什么C标准没有明确说明存储在哪里的原因。

根本不需要存储函数参数(“参数”)。 请记住:C使用按值调用 。 值不需要存储在存储器位置,它可以存在于寄存器中,或者其值可以以某种方式从程序状态结束。

例如,像strlen()或sin(),cos(),sqrt()这样的库函数可以在硬件中实现。 sin(x) 可以通过将对应于x一些值存储到特殊function寄存器中,发出特殊function指令并拉出结果来实现。 (浮点硬件有时甚至有伪指令以最佳精度表示Pi .Pi值永远不会传递,只有指令:“使用Pi / 2”)

即使对于“普通”用户定义函数,参数也可以通过寄存器传递,多个参数可以组合成一个大寄存器,甚至可以优化掉。

这在内联函数中最明显,这些可以完全消失,因为它们的function已经与调用者的function相结合。

当函数获取其中一个参数的地址时(例如int func(int arg) { int *p = &arg; }将强制arg具有地址),情况会有所不同,但这种情况相对较少。

WRT标准:C函数具有激活记录 。 (非标准人可能称之为“堆栈框架”)。 并且该函数的行为就好像参数是其局部变量的一部分,并且一旦函数返回它们就会超出范围。 他们如何获得他们的价值是完全无关紧要的,理论上它甚至可以通过消息传递来完成。