如何使用其关联的内存地址记住名称

  • 本文关键字:地址 内存 何使用 关联 c++
  • 更新时间 :
  • 英文 :


为了定义我的奇迹,我认为一个例子很棒:

  • 变量x的初始值为2,并具有全局范围

    int x = 2;
    
  • 因为该变量X具有全局范围,因此到处可见,这意味着编译器必须以某种方式记住其内存地址。无论如何,x然后从给定功能" bla"

    更改
    void bla()
    {
        x = 5;
    }
    
  • 因此,编译器(不确定如何处理所有这些(记得此名称" x",并且可以以某种方式知道属于名称x ...

  • 的内存地址

所以我的问题是:

  1. 编译器(仍然不确定这一点(如何记住属于哪个名称/标识符和内存地址?这些信息存储在哪里 - 它也存储在内存地址?
  2. 从技术上讲,如果程序员编写了实际的内存地址而不是名称,以便编译器(您可能到现在我不确定这些处理方法(不必替换所有变量等。与地址?

谢谢!我确实试图不做任何模棱两可的事情,但是如果您仍然觉得它令人困惑,请评论或建议编辑 请纠正我,如果我错了,请再次感谢!

要获得更深入的理解,您必须咨询有关语言和编译的一些学习资源。

C 语言的定义带有声明点和范围的概念。这些东西需要由编译器尊重,因此对于形成良好的代码中的每个表达式,编译器都会知道该表达式属于哪个范围以及范围如何嵌套。

典型的编译器实现将具有数据结构,其中每个范围与符号表关联,其中列出了当前范围的声明/定义符号。现在,当编译器(典型的实现,可以完全不同!(遇到代码中的符号(例如x = 5;(时,它将查看当前范围及其父范围的符号表,直到符号x为首先找到。然后,符号用法与在符号表中找到的符号定义相关联。

跳过一些细节,您的示例至少包含以下范围嵌套:

global scope
  function bla scope
    function bla body scope

由于x并未在任何内部范围中局部声明/定义,因此编译器将使用使用范围与在全局范围中找到的定义链接。

从技术上讲,如果程序员编写实际的,它会更快 内存地址而不是名称,以便编译器(您可能 现在知道我不确定这些事情的处理方式( 不必用地址替换所有变量等?

当我们谈论开发时,编译器将比该任务的程序员快得多,因此在这里没有时间保存。

关于程序执行,该符号不再存在(除了调试信息外(,因为编译器正在通过其程序 - 本地内存地址替换它。通常,您无法通过手工做任何事情来节省执行时间。

最新更新