什么是符号表?

有人可以描述C和C ++的上下文中的符号表吗?

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

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

其次,共享库或DLL中也有符号表。 这是由链接器生成的,用于命名图书馆用户可见的所有function和数据项。 这允许系统执行运行时链接,将对这些名称的开放引用parsing到库被加载到内存中的位置。

如果你想了解更多,我build议约翰·莱文的优秀着作“连接器和装载机”。 链接文本

简而言之,就是将variables赋给其在内存中的地址的名称映射,包括types,范围和大小等元数据。 它由编译器使用。

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

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

nm [目标文件]

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

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

查看符号表维基百科条目。

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