假设我们有这些局部变量:

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个字节的例子。它实际上比这是因为堆栈帧中的其它信息进一步移动它如返回地址。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top