什么是符号表?

时间:2008-09-16 03:14:58

标签: c++ c symbol-table

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

6 个答案:

答案 0 :(得分:73)

这里有符号表的两个常见和相关含义。

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

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

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

答案 1 :(得分:23)

简而言之,它是您为变量分配名称到内存中地址的映射,包括类型,范围和大小等元数据。它由编译器使用。

一般而言,不只是C [++] *。从技术上讲,它并不总是包含直接内存地址。这取决于编译器所针对的语言,平台等。

答案 2 :(得分:13)

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

  

nm [目标文件]

列出该目标文件的符号表。

答案 3 :(得分:8)

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

答案 4 :(得分:4)

查看Symbol Table维基百科条目。

答案 5 :(得分:0)

符号表是由编译器创建和维护的重要数据结构,用于存储有关各种实体(如变量名,函数名,对象,类,接口等)的出现的信息。