1
6
局部变量的偏移量作为常量“烘焙”到机器代码中。在编译器完成时,程序中称为局部变量的内容将替换为编译器指定的固定内存偏移量。 假设您声明了三个局部变量:
编译器将偏移量分配给这些变量:
此处唯一更改的值是
|
2
2
前言:以下文本使用x86体系结构作为示例。其他体系结构的处理方式确实不同。
很接近了。 它是通过将它们放入内存来实现的 上 堆栈[当前进程的] . 每一个 过程 有自己的堆栈。因此,对于每个上下文切换 堆叠框架 改变了吗?它也改变了 局部变量(堆栈上) .
通常(!)本地定义的变量相对于
堆叠框架
已保存并存在于
较新的编译器可以节省寄存器
所以要回答你的主要问题
流程跟踪其
堆叠框架
(其中包含
局部变量
),但不是他们的
局部变量
他们自己以及
堆叠框架
每项更改
过程开关
. 这个
局部变量
仅相对于
堆栈帧指针
登记在册
|
3
1
编译器负责记忆偏移量。这些偏移量只是硬编码的。若要加载变量以注册(例如,到eax),编译器将生成以下内容
此外,某些平台上的堆栈可能会反转,因此偏移量将为正。 |
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |