在堆栈变量是如何进入?
-
22-08-2019 - |
题
假设我们有这些局部变量:
int a = 0;
int b = 1;
int c = 2;
int d = 3;
据我所知,这些将在系统栈上分配,如下所示:
| |
| 3 | d
| 2 | c
| 1 | b
|_0_| a
这是否意味着为了得到a的值,d,c和b的值必须首先被弹出堆栈的?如果是这样,你在哪里这些价值观去?这是否意味着访问最近声明的变量会更快?还是我失去了一些东西(我怀疑是这种情况),并在整个事件中一些其他的方式运作的?
编辑:谢谢,伙计们
解决方案
在堆栈上的局部变量相对于通常访问以所谓的帧指针的,这点在你的堆栈帧的开始。它也将是可能的这相对于堆栈指针做,但由于这表达式更难以跟踪的评估过程中到处移动。
在实践中,这样的变量也可被保存在处理器寄存器。
其他提示
还是我失去了一些东西。
您错过了叠驻留在常规存储器,允许随机访问 - 只需添加相应的偏移帧指针(“本地”堆栈的底部),你会得到一个指针存储单元持有值。
这是否意味着,为了获得 a的值,d,C的值和 B必须首先被弹出的 堆栈?
简单地发射的代码移动堆栈指针当进入正确的字节数功能。它留下功能时移回相同的距离。因此,它不会单独流行过的变量。假设一个int是4个字节,你给将移动堆栈指针16个字节的例子。它实际上比这是因为堆栈帧中的其它信息进一步移动它如返回地址。
不隶属于 StackOverflow