关于c ++:什么是符号表?

关于c ++:什么是符号表?

What is a symbol table?

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


符号表在这里有两种常见且相关的含义。

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

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

如果您想了解更多信息,我建议约翰·莱文(John Levine)的绝妙著作"链接器和加载器"。链接文本


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

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


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

nm [object file]

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


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


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


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


推荐阅读