代码之家  ›  专栏  ›  技术社区  ›  jdt141

什么是符号表?

  •  78
  • jdt141  · 技术社区  · 17 年前

    有人能描述符号表在C和C++上下文中是什么吗?

    6 回复  |  直到 8 年前
        1
  •  72
  •   Ben Combee    17 年前

    这里有两个共同的和相关的符号表含义。

    首先,对象文件中有符号表。通常,C或C++编译器将一个源文件编译为.Obj.O.O扩展的目标文件。它包含可执行代码和数据的集合,链接器可以将这些代码和数据处理到工作应用程序或共享库中。对象文件中有一个称为符号表的数据结构,它将对象文件中的不同项映射到链接器可以理解的名称。如果从代码中调用函数,编译器不会将例程的最终地址放在对象文件中。相反,它将一个占位符值放入代码中,并添加一个注释,通知链接器从正在处理的所有对象文件中查找各种符号表中的引用,并将最终位置粘贴在代码中。

    第二,共享库或DLL中也有符号表。这是由链接器生成的,用于命名库用户可见的所有函数和数据项。这允许系统进行运行时链接,将对这些名称的打开引用解析为库在内存中的加载位置。

    如果你想了解更多,我建议约翰莱文的优秀书籍“链接器和加载器”。 link text

        2
  •  22
  •   Steve Landey    17 年前

    简而言之,它是将变量的名称映射到内存中的地址,包括类型、作用域和大小等元数据。它由编译器使用。

    一般来说,这不仅仅是C[++]*。从技术上讲,它并不总是包括直接内存地址。它取决于编译器的目标语言、平台等。

        3
  •  13
  •   hdn    14 年前

    在Linux中,可以使用以下命令:

    NM[目标文件]

    列出该对象文件的符号表。

        4
  •  8
  •   Joe Schneider    17 年前

    符号表是程序/单元中的“符号”列表。符号通常是变量或函数的名称。符号表可用于确定内存中变量或函数的位置。

        5
  •  4
  •   AShelly    14 年前

    退房 Symbol Table 维基百科条目。

        6
  •  0
  •   rashedcs    8 年前

    符号表是编译器为存储变量名、函数名、对象、类、接口等各种实体出现的信息而创建和维护的重要数据结构。

    推荐文章