CPU如何查找变量的位置
How an CPU finds location of a variable
我正在使用C++(对不起,如果我的问题有点困惑的话)。我知道指针是如何工作的。它指向一个变量的地址。我的问题是,如果我在堆栈或堆中创建了一个简单的变量(而不是指针)。CPU如何找到变量的地址,因为没有指向该变量的指针。它只是内存中某个地址的名称。例如
int main()
{
int a=5;//Created a variable by allocating 4 bytes
return 0;
}
它创建了一个变量,但问题是CPU将如何找到该变量?
您似乎有一些概念上的误解。在每个程序中,都有一个名为stack的内存区域,用于分配局部变量。在大多数计算机体系结构中,有一个名为堆栈指针(x86_64体系结构中的rsp)的寄存器,它指向堆栈的顶部(从较高的内存地址增长到较低的地址)。
在执行时,程序代码(由编译器而非操作系统生成)使用此堆栈指针作为基础来分配其局部变量。因此,您的代码会将数字5本身移动到调用main()
时堆栈指针的当前值所指向的位置,偏移量为4字节(当前sp寄存器指向的位置根本不知道,因为每次函数调用时它都在变化)。
CPU如何找到变量的地址,因为没有指向该变量的指针。它只是内存中某个地址的名称。
这不是真的。事实上恰恰相反。
在可执行文件中,编译器已经编写了变量的地址(或者与当前堆栈帧的相对偏移量)和描述如何使用它的机器指令。名称根本不存在。
这就是你的CPU知道如何找到变量的方式:这个变量在运行时已经不存在了!它是C++的抽象,由程序员提供给您,让您的生活更轻松。但它与实际计算机程序的实际工作方式以及CPU执行方式几乎没有关系。
相关文章:
- 非常量变量只读位置的赋值
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 在 elf 文件中查找全局变量的位置
- C++强制变量到一个固定的内存位置
- 当使用Lua作为嵌入式语言(比如c++)时,有什么简单/方便的方法可以找到变量在Lua中的定义位置吗
- 函数,返回变量c++占用的内存位置的大小
- 在 Visual Studio 2010(及更高版本)中定义包含或链接路径变量的位置
- 为什么动态分配的两个变量的内存位置不是连续的?
- ClangTool 如何获取变量声明中模板参数的位置?
- 如何跟踪通过外部代码修改类变量的所有位置
- 适用于会员变量的新位置
- C++每个变量的存储位置是否正确?
- 可视C 编译器将相同的存储位置提供给两个变量
- 双变量的精度仅为十点后的2个位置
- *的位置有什么区别:*变量与变量*
- 引用变量何时合适,为什么?你能解释一下实际的语法和位置吗?
- 局部类变量位置
- 运行时检查失败 #2 - 变量"位置"周围的堆栈已损坏
- 将cout引用到一个变量位置(文件或cmd)
- 单例的静态变量位置