符号表是程序/单元中“符号”的列表。符号通常是变量或函数的名称。符号表可用于确定变量或函数在内存中的位置。 简而言之,Symbol Table 是分配给函数&变量的名称与其在内存中的地址的映射,包括类型、范围和大小等元数据。最终由编译器使用。
通常,C 或 C++ 编译器将单个源文件编译为扩展名为 .obj 或 .o 的目标文件。目标文件包含可执行代码和数据的集合,链接器可以将其处理成工作应用程序或共享库。
目标文件中有一个称为符号表的数据结构,它将目标文件中的不同项目映射到链接器可以理解的名称。如果您从代码中调用函数,编译器不会将例程的最终地址放入目标文件中。相反,它将一个占位符值放入代码中并添加一个注释,告诉链接器从它正在处理的所有目标文件中查找各种符号表中的引用,并将最终位置粘贴在那里。
其次,还有.so 或 .dll 中的符号表。这是由链接器生成的,用于命名库用户可见的所有函数和数据项。这允许系统进行运行时链接,将对这些名称的开放引用解析为库在内存中加载的位置。
nm 目标文件: 列出目标文件的符号表。
符号表,仅仅是在编译器编译时,在编译器编译过程中编译器内部产生的一个临时的列表而已。
编译结束后就不再需要的。所以,它是不会占用程序的内存
函数&全局变量&静态变量会生成符号。
局部变量不会生成符号,最终是分配在栈内存中,不会在函数外部被引用。
标签:文件,符号表,函数,C++,编译器,关于,链接,内存 From: https://www.cnblogs.com/-hz01/p/17977073