什么是符号表?

时间:2020-03-05 18:55:05  来源:igfitidea点击:

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

解决方案

回答

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

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

回答

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

回答

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

回答

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

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

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

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