参数变量在内存中存储在哪里?
我正在用C编写一些代码,当遇到一个方法时,我想知道参数变量存储在内存中的位置。 我知道以下几点:
全局变量 - >存储在静态代码段
静态变量 - >
本地自动变量(内部方法) - >存储在堆栈上
本地静态变量 - >存储在堆栈上
局部const变量 - >存储在堆栈上
假设我的假设是正确的。
但参数变量存储在哪里? 例如:int *(int x,char * c);
谢谢!
编辑:我知道,当我malloc的东西,它被放在堆上,但说我解引用指针来获取指针位置的值,是否也存储在堆或它现在在堆栈中?
它取决于很多不同的事情,调用约定是主要的东西。 这个x86
页面涉及到各种调用约定以及参数如何传递给一个函数,而这个参考文件是关于调用由各种C ++编译器和平台使用的约定的。 一般来说,它要么通过通过寄存器堆栈。
我对C ++(嵌套)函数调用指令的回答 - 寄存器也是相关的,并且有一些更有用的链接。
C,ITYM函数中没有方法。
全局变量以及静态变量都存储在.data或.bss节中(以下称为“数据段”)。
本地静态变量也存储在数据段中。
函数的参数值也存储在堆栈中,并在返回地址之前立即推送。
所有生活在栈上的东西(局部变量,参数等)都可以存在于寄存器中。 这就是为什么C标准没有明确规定在什么地方存储的地方。
函数参数(“参数”)根本不需要存储。 请记住:C按价值使用呼叫。 一个值不需要存储在内存中,它可以存放在一个寄存器中,或者它的值可以通过某种方式从程序状态中得出结论。
例如,像strlen()或sin(),cos(),sqrt()这样的库函数可以用硬件实现。 可以通过将某些对应于x
存入特殊功能寄存器,发出特殊功能指令并将结果提取出来,来实现sin(x)。 (浮点硬件有时甚至有伪指令来以最好的精度表示例如Pi,Pi值永远不会被传递,只有指令“使用Pi / 2”)
即使对于“正常”的用户定义函数,参数也可以通过寄存器传递,多个参数可以合并成一个大寄存器,甚至可以优化出来。
这对于内联函数来说是最好的,它们可以完全消失,因为它们的功能与调用者的功能相结合。
当函数获取其中一个参数的地址时,情况会有所不同(例如, int func(int arg) { int *p = &arg; }
将强制arg获得地址),但这种情况相对较少。
WRT标准:一个C函数有一个激活记录。 (非标准人员可能会称之为“堆栈框架”)。 函数的行为就好像参数是局部变量的一部分,并且一旦函数返回,它们就会超出范围。 他们如何获得他们的价值是完全不相干的,理论上甚至可以通过消息传递来完成。
链接地址: http://www.djcxy.com/p/14473.html