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

有帮助吗?

解决方案

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

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

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

如果你想了解更多,我推荐 John Levine 的优秀著作《Linkers and Loaders》。链接文本

其他提示

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

这是一般情况,而不仅仅是 C[++]*。从技术上讲,它并不总是包含直接内存地址。这取决于什么语言、平台等。编译器正在瞄准。

在Linux中,可以使用命令:

nm [目标文件]

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top