首页 > 编程语言 >关于C++符号表

关于C++符号表

时间:2024-01-20 20:12:25浏览次数:33  
标签:文件 符号表 函数 C++ 编译器 关于 链接 内存

符号表是程序/单元中“符号”的列表。符号通常是变量或函数的名称。符号表可用于确定变量或函数在内存中的位置。 简而言之,Symbol Table 是分配给函数&变量的名称与其在内存中的地址的映射,包括类型、范围和大小等元数据。最终由编译器使用。

通常,C 或 C++ 编译器将单个源文件编译为扩展名为 .obj 或 .o 的目标文件。目标文件包含可执行代码和数据的集合,链接器可以将其处理成工作应用程序或共享库。

目标文件中有一个称为符号表的数据结构,它将目标文件中的不同项目映射到链接器可以理解的名称。如果您从代码中调用函数,编译器不会将例程的最终地址放入目标文件中。相反,它将一个占位符值放入代码中并添加一个注释,告诉链接器从它正在处理的所有目标文件中查找各种符号表中的引用,并将最终位置粘贴在那里。

其次,还有.so 或 .dll 中的符号表。这是由链接器生成的,用于命名库用户可见的所有函数和数据项。这允许系统进行运行时链接,将对这些名称的开放引用解析为库在内存中加载的位置。

nm 目标文件: 列出目标文件的符号表。

 

符号表,仅仅是在编译器编译时,在编译器编译过程中编译器内部产生的一个临时的列表而已。
编译结束后就不再需要的。所以,它是不会占用程序的内存

 

函数&全局变量&静态变量会生成符号。

局部变量不会生成符号,最终是分配在栈内存中,不会在函数外部被引用。

标签:文件,符号表,函数,C++,编译器,关于,链接,内存
From: https://www.cnblogs.com/-hz01/p/17977073

相关文章

  • 关于 LIS,它没死
    关于LIS,它没死一篇洛谷日报需要一张头图:0.前言LIS(最长上升子序列)为DP(动态规划)的经典题型,也经常最为初学者们最先接触的DP题目。本文将详细介绍有关LIS的内容及拓展。让我们从这一个简单问题开始:给定一个长度为\(n\)的序列\(a\),请你求出它的最长上升子序列长度。......
  • C++模板例子
    title:"C++模板例子"date:2023-11-02T01:05:25+08:00tags:["C++"]categories:[]draft:falsetoc:true#include<vector>#include<type_traits>usingnamespacestd;classAA{};classBB{};classTest{public:templ......
  • 关于SQL-case when最全面的学习笔记
    原文zhuanlan.zhihu.com/p/110198759?from_voters_page=truecasewhen推荐学习书籍:1、SQL基础教程6-32、SQL进阶教程1-1casewhen是SQL语法中提供的标准的条件分支。条件分支在MYSQL中即为IF函数,不同的数据库都会提供自己的一些函数,但是CASEWHEN更加通用。CASE语句......
  • 【C++入门到精通】 C++入门—命名空间
    前言    前面我们学习了C语言,并且知道了C语言的基础语法与用途。接下来一段时间我们会再来学习一下基于C语言并且根据C语言改造的一门新的语言—C++     硕硕相信只要各位大佬们跟着我的博客看下去,肯定能有不少的收获。二话不说咱们要开车了,坐稳扶好呦C++的发展历......
  • 关于 Special Judge 的编写和本地测试
    最近有几位同学来问我SpecialJudge怎么写?为了让大家可以写出SpecialJudge方便在本地调试和对拍,我就想写一篇文章来介绍SpecialJudge。SpecialJudge是什么?有什么用?大家可以先看这样一篇文章:SpecialJudge-OIWiki(oi-wiki.org)。SpecialJudge(简称:SPJ,别名:checker)......
  • C++常见面试题整理
    1.CPP编译链接过程1.CPP编译链接过程预处理处理以#开头的命令,纯文本替换,类型不安全#pragmalib和#pragmalink除外,#pragmalib用于指定要链接的库,#pragmalink用于指定程序入口(默认入口是main函数,但可以通过该命令修改)都是在链接阶段进行处理编译词法分析,语法分析,......
  • C++11原子变量:线程安全、无锁操作的实例解析
     在C++11中,原子变量(std::atomic)提供了一种线程安全的方式来操作共享变量。下面是一个简单的例子,演示了C++11原子变量的用法。#include<iostream>#include<atomic>#include<thread>std::atomic<int>counter(0);//声明一个原子整数变量voidincrementCounter(int......
  • C++ opencv计算两个cv::Rect的重复面积
    C++ opencv计算两个cv::Rect的重复面积  #include<opencv2/opencv.hpp>#include<iostream>intmain(){//创建两个矩形cv::Rectrect1(10,10,50,50);//(x,y,width,height)cv::Rectrect2(30,30,50,50);//检查两个矩形是否重叠......
  • c++函数默认参数及占位参数
    一.函数默认参数在c++中,函数形参列表中的形参是可以有默认值的语法:如果我们自己传入数据,就用自己的数据,如果没有,就用默认值注意:1.如果某个位置参数有默认值,那么从这个位置往后,从左往右,必须都要有默认值2.如果函数声明有默认值,函数实现的时候就不能有默认参数。(声明和实现只......
  • c++引用
    一.引用的基本使用作用:给变量起别名语法:数据类型&别名=原名二.引用注意事项引用必须初始化引用在初始化后,不可以改变三.引用做函数参数作用:函数传参时,可以利用引用技术让形参修饰实参优点:可以简化指针修饰实参四.引用做函数返回值注意:1.不要返回局部变量的引用......