有人可以在 C 和 C++ 的上下文中描述什么是符号表吗?
原文由 jdt141 发布,翻译遵循 CC BY-SA 4.0 许可协议
来自“计算机系统程序员的观点”一书,第 7 章链接。 “符号和符号表”:
符号表是程序中定义和引用的函数和全局变量的信息
重要说明(形成同一章):
重要的是要意识到本地链接器符号与本地程序变量不同。符号表不包含任何与本地非静态程序变量相对应的符号。这些在运行时在堆栈上进行管理,链接器不感兴趣
原文由 andreyk2 Hohlov 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
这里符号表有两种常见的相关含义。
首先,目标文件中有符号表。通常,C 或 C++ 编译器将单个源文件编译为扩展名为 .obj 或 .o 的目标文件。这包含链接器可以处理成工作应用程序或共享库的可执行代码和数据的集合。目标文件中有一个称为符号表的数据结构,它将目标文件中的不同项目映射到链接器可以理解的名称。如果您从代码中调用函数,编译器不会将例程的最终地址放入目标文件中。相反,它将占位符值放入代码中并添加一个注释,告诉链接器从它正在处理的所有目标文件中查找各种符号表中的引用并将最终位置粘贴在那里。
其次,共享库或 DLL 中还有符号表。这是由链接器生成的,用于命名库用户可见的所有函数和数据项。这允许系统进行运行时链接,将对这些名称的打开引用解析为库在内存中加载的位置。
如果你想了解更多,我推荐 John Levine 的优秀著作《Linkers and Loaders》。 链接文本