CLL-符号修饰与函数签名
我们知道,在c++中,函数是可以重载的,也就是说函数名相同,但参数不同。那么编译器和链接器是怎样区分两个同名的函数的呢?由目标文件的三魂七魄(如果不清楚可以看看这边文章)可以知道,函数名和变量名都是符号(symbol),正是c++的符号修饰(name decoration)机制支持了这种特性。
在c中,现在gcc编译器,函数名的符号一般都是函数名本身,所以c没有函数重载这样的特性。
下面,通过一个实例来说明符号修饰机制
通过g++ -c test.cpp -o test.o
编译后,再使用readelf -s test.o
查看test.o的符号表信息。
可发现,所有的函数的符号修饰都是以"_Z"开头。
第17、18行的两个函数名分别为_Z4funci
,_Z4funcf
;4 表示函数名的字符个数,i和f分别表示函数的形参的数据类型;
第32行的函数名为_ZN1A4funcEi
,因为该函数是类A的函数,所以_Z
后紧跟一个N
,接着是类名的长度,本例中类名A只有一个字符,所以长度为1;对于在命名空间或类里面的函数,它的符号修饰是以E
结尾,紧接着跟函数的形参数据类型。
也就是说,在namespace或class内部定义的函数,被修饰后的函数名是以N开头,以E结尾,中间的修饰名称由**[命名空间字符长度][命名空间名][类名字符长度][类名]函数名长度 函数名** 组成。
函数签名可以通过c++filt
命令查看
函数签名(function signature)包含函数名、函数参数类型、所在类及命名空间的信息。
CLL-符号修饰与函数签名相关推荐
- C++ 符号修饰和函数签名
前言: (这部分讲的是历史.由来,不想了解的可跳过) 约在20世纪70年代以前,编译器编译源代码产生目标文件时,符号名与相应的变量和函数的名字是一样的.比如一个汇编源代码里面包含了一个函数foo,那么 ...
- C++符号修饰与函数签名
很久以前在一个汇编源代码里包含一个函数foo,那么汇编器将它编译成目标文件以后,foo在目标文件中的相对应的符号名也是foo. 当后来Unix平台和C语言出现后,已经存在了相当多的汇编编写的库和目标文 ...
- c, c++函数名编译符号修饰符说明
C++ 编译器的函数名修饰规则 函数名字修饰(Decorated Name)方式 函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串.用来指明函数的定义或原型. LIN ...
- C++学习笔记(十)成员变量和成员函数分开存储、this指针、空指针访问成员函数、const修饰成员函数、友元
1.成员变量和成员函数分开存储 //1.在C++中,类内的成员变量和成员函数分开存储 //2.只有非静态成员变量才属于类的对象上 //空对象占用内存空间为:1 //C++编译器会给每个空对象也分配一个 ...
- Go 学习笔记(16)— 函数(02)[函数签名、有名函数、匿名函数、调用匿名函数、匿名函数赋值给变量、匿名函数做回调函数]
1. 函数签名 函数类型也叫做函数签名,可以使用 fmt.Printf("%T") 格式化参数打印函数类型. package mainimport "fmt"f ...
- python3 函数签名简介 验证函数参数
一个函数或方法,它使用*args和**kwargs作为参数,这样使得它比较通用, 但有时候你想检查传递进来的参数是不是某个你想要的类型.可以使用函数签名来做验证 函数签名对象,表示调用函数的方式,即定 ...
- 【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 )
文章目录 I . 调用 Java 方法流程 II . 获取 jclass 对象 ( GetObjectClass ) III . 获取 jclass 对象 ( FindClass ) IV . JNI ...
- 浅谈python函数签名
函数签名对象,表示调用函数的方式,即定义了函数的输入和输出. 在Python中,可以使用标准库inspect的一些方法或类,来操作或创建函数签名. 获取函数签名及参数 使用标准库的signature方 ...
- inline修饰虚函数问题
inline修饰虚函数问题 虚函数是否可以内联? 虚函数是否可以内联? 一般来说,inline是编译时的行为,虚函数是在程序执行时的行为,因此编译器一般会拒绝对虚函数进行内联! 该博文为原创文章,未经 ...
最新文章
- 事务隔离机制原理深入分析以及MySQL不同隔离级别分场景下实验对比
- centos7.2安装mysql
- CentOS 6.7 Gitolite 服务搭建及TortoiseGit配置连接
- Android笔记一.深入理解Intent和IntentFilters(一)
- 类属性、类方法;私有属性、公有属性;私有方法、公有方法;静态属性、静态方法;python的命名规范__xx__\__xx\_xx(自用笔记)
- a标签hidden属性_HTML5属性a标签ping被用于DDOS攻击,QQ浏览器被波及
- Hash Length Extension Attacks
- python找出矩阵中的马鞍点_矩阵的马鞍点
- 我们都在深夜,参差不齐地入眠
- 剑指offer面试题[30]-最小的k个数
- IS-IS详解(七)——IS-IS LSP报文详解
- 楼主,不知道为什么这么流行
- android获得手机目录,关于android手机文件目录的收集
- 将iTunes音乐传输到USB驱动器以在汽车中收听
- 地产行业主数据建设项目思考
- ubuntu如何安装rpm
- Arx常用代码《转》
- 元素JavaScript知识点梳理与经典百例
- Android中使用AudioManager实现按键录音并保存以及点击播放功能
- Java架构师大型互联网高级技术视频教程