C语言 什么是符号表?

6qfn3psc  于 2023-10-16  发布在  其他
关注(0)|答案(7)|浏览(149)

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

wyyhbhjk

wyyhbhjk1#

这里有两个常见的相关符号表的含义。
首先,在你的目标文件中有一个符号表。通常,C或C++编译器将单个源文件编译为扩展名为.obj或.o的目标文件。它包含可执行代码和数据的集合,链接器可以将这些代码和数据处理到工作应用程序或共享库中。目标文件中有一个称为符号表的数据结构,它将目标文件中的不同项Map到链接器可以理解的名称。如果从代码中调用函数,编译器不会将例程的最终地址放在目标文件中。相反,它将一个占位符值放入代码中,并添加一个注解,告诉链接器从它正在处理的所有对象文件中查找各种符号表中的引用,并将最终位置粘贴在那里。
第二,共享库或DLL中还有符号表。这是由链接器产生的,用于命名库用户可见的所有函数和数据项。这允许系统进行运行时链接,将对这些名称的打开引用解析到库在内存中加载的位置。
如果你想了解更多,我建议你读John Levine的优秀著作《Linkers and Loaders》。link text

xhv8bpkk

xhv8bpkk2#

简单地说,它是您分配给变量的名称到其在内存中的地址的Map,包括类型,范围和大小等元数据。它由编译器使用。
这是一般的,不仅仅是C[++]*。从技术上讲,它并不总是包括直接内存地址。这取决于什么语言、平台等。编译器的目标。

mklgxw1f

mklgxw1f3#

在Linux中,您可以使用命令:
目标文件
列出该目标文件的符号表。从这个例子中,你可以从它们的mangled names中破译正在使用的链接器符号。

unhi4e5o

unhi4e5o4#

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

thigvfpy

thigvfpy5#

查看Symbol Table维基百科条目:
语言翻译程序(如编译程序或解释程序)使用的一种数据结构,其中程序源代码中的每个标识符(或符号)、常量、过程和函数都与有关其在源代码中的声明或外观的信息相关联。

wvyml7n5

wvyml7n56#

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

hk8txs48

hk8txs487#

从“计算机系统程序员的Angular 来看”一书,第7章链接。“符号和符号表”:
符号表是程序中定义和引用的函数和全局变量的信息
和重要的注意事项(形成同一章):
重要的是要认识到局部链接器符号与局部程序变量不同。符号表不包含任何对应于局部非静态程序变量的符号。这些是在运行时在堆栈上管理的,链接器对此不感兴趣

相关问题