【发布时间】:2014-10-22 19:38:48
【问题描述】:
我正在阅读 Effective C++,第 3 版和第 2 项(更喜欢 const、枚举和内联而不是#defines),Scott Meyers 提到了 符号表:他解释说#defines可能不会出现在符号表中。
根据here的答案、reading的一些建议以及Wikipedia的文章,我将符号表定义如下:由于编译器只为每个翻译单元创建目标文件,我们仍然需要一种方法来引用翻译单元之间的符号。这是使用为每个目标文件创建的表来完成的,以便可以在稍后阶段定义符号 - 在从目标文件创建可执行文件/库时由链接器定义。在链接过程中,符号被链接器替换为相应的内存地址。
以下是我想知道的:
- 我上面的解释正确吗?
- 链接后,一旦内存地址被解析,我认为不需要符号表吗?也就是说,我认为符号表在可执行文件/库中不可用;对吗?
- 我怀疑符号表对其他编译器任务也有用?可能是识别命名冲突之类的东西?
- 上述符号表与export table不同。至少在 Visual C++ 的上下文中,导出表定义了在库外显式声明为可见的符号。我想在某种意义上这是一个符号表——但与 Scott 所指的符号表无关。
- 符号表还有什么有趣的地方吗?也就是说,我应该有关于符号表的任何其他见解吗?
感谢您的时间和贡献。
【问题讨论】:
标签: c++ visual-c++ compiler-construction symbols effective-c++