CPU如何查找变量的位置

How an CPU finds location of a variable

本文关键字:变量 位置 查找 何查找 CPU      更新时间:2023-10-16

我正在使用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执行方式几乎没有关系。