有人能在C和C++的上下文中描述符号表是什么吗?
这里有两个符号表的共同含义和相关含义。
首先,在对象文件中有一个符号表。通常,C或C++编译器将单个源文件编译为扩展名为.obj或.o的对象文件。它包含可执行代码和数据的集合,链接器可以将这些代码和数据处理到工作应用程序或共享库中。对象文件中有一个称为符号表的数据结构,它将对象文件中的不同项映射到链接器可以理解的名称。如果从代码中调用函数,编译器不会将例程的最终地址放在对象文件中。相反,它在代码中放置了一个占位符值,并添加了一个注释,告诉链接器从它正在处理的所有对象文件中查找各种符号表中的引用,并将最终位置粘贴在那里。
其次,还有一个共享库或DLL中的符号表。这是由链接器生成的,用于命名库用户可见的所有函数和数据项。这允许系统进行运行时链接,将对这些名称的打开引用解析到内存中加载库的位置。
如果你想了解更多,我推荐约翰·莱文的优秀著作《链接者和装载者》链接文本
简单地说,它是将变量的名称映射到内存中的地址,包括类型、范围和大小等元数据。它由编译器使用。
这是一般情况,而不仅仅是C[++]*。从技术上讲,它并不总是包括直接内存地址。这取决于编译器的目标语言、平台等。
符号表是程序/单元中的“符号”列表。符号通常是变量或函数的名称。符号表可用于确定内存中变量或函数的位置。
查看符号表维基百科条目。
符号表是编译器创建和维护的一种重要数据结构,用于存储变量名、函数名、对象、类、接口等各种实体的出现信息。
摘自《计算机系统——程序员的视角》一书,第7章链接。“符号和符号表”:
Symbol table is information about functions and global variables that are defined and referenced in the program
以及重要注释(形成同一章):
It is important to realize that local linker symbols are not the same as local program variables. The symbol table does not contain any symbols that correspond to local nonstatic program variables. These are managed at run time on the stack and are not of interest to the linker
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding