假设我们有这些本地变量:
int a = 0;
int b = 1;
int c = 2;
int d = 3;
据我所知,这些将被分配在系统堆栈上,如下所示:
| |
| 3 | d
| 2 | c
| 1 | b
|_0_| a
这是否意味着为了获得a的值,必须首先从堆栈中弹出d、c和b的值?如果是这样,这些值会去哪里?这是否意味着访问最近声明的变量会更快?或者我漏了什么(我怀疑是这种情况),整个过程以某种其他方式工作?
编辑:谢谢,伙计们!
假设我们有这些本地变量:
int a = 0;
int b = 1;
int c = 2;
int d = 3;
| |
| 3 | d
| 2 | c
| 1 | b
|_0_| a
栈上的局部变量通常相对于所谓的帧指针进行访问,该指针指向您的堆栈帧的开头。虽然也可以相对于栈指针进行访问,但由于在表达式求值期间它会移动,因此更难跟踪。
实际上,这些变量可能还存储在处理器寄存器中。
还有什么我没注意到的吗?
你忽略了栈存在于常规内存中,这使得随机访问成为可能-只需将相应的偏移量添加到帧指针(“本地”栈的底部),就可以获得指向保存值的存储单元的指针。