当前位置: 首页 > news >正文

c++--静态联编--动态联编

静态联编

定义

编译阶段就确定了函数调用将执行哪个具体的函数实现。

原理

这个机制的核心原理在于编译器能够在编译时根据函数签名(包括函数名、参数类型和数量)来决定调用哪一个函数。

以下是这一过程的基本原理:

函数签名
函数签名由函数名称、参数的类型和顺序组成,但不包括返回值类型。
编译时解析
生成独一无二的函数签名:为了支持函数重载,编译器会对函数名进行修改,加入参数类型的编码信息,以生成一个唯一的内部标识符。例如,在C++中,对于同一个函数名的不同重载版本,编译器会基于其参数列表生成不同的函数签名,确保每个重载版本都有一个独一无二的名字。


函数调用类型检查:编译器在编译过程中会检查每个函数调用对应的参数类型是否与某个函数声明中的参数类型相匹配。当找到匹配项后,编译器就能确定该调用具体对应的是哪个函数实现。


插入函数地址:一旦编译器确定了函数调用所对应的函数实现,它会在目标代码中插入一条直接跳转到该函数起始地址的指令。这意味着在程序运行时,无需额外的计算或查找即可直接执行相应的函数代码。

使用场景

函数重载

动态联编

定义

函数调用与函数实现的关联是在运行时才确定的。

原理

虚函数/多态的原理--链接

虽然虚函数地址是在编译阶段确定,但是虚函数需要通过虚函数指针查询找到之后,才能调用,而虚函数指针属于类对象成员,而类对象实在运行阶段分配内存实例化的。

变量实例化

函数内存分配

使用场景

动态多态

相关文章:

  • 动态库与静态库:深入解析与应用
  • CAS单点登录(第7版)12.密码管理
  • CANopen 基础
  • 13 责任链(Chain of Responsibility)模式
  • 数据结构与算法-哈希表
  • resultMap 标签
  • 变相提高大模型上下文长度-RAG文档压缩-2.带早停机制的map-refine
  • pgsql用户和权限管理
  • 安卓基础(持续更新的笔记)
  • Kotlin Lambda
  • 2025年,如何选择IT监控平台
  • CEF132 编译指南 Linux 篇 - CEF 编译实战:构建 CEF(六)
  • 【Redis】下载安装Redis和Redis图形化界面工具教程(2024最新版本,史上最详细)
  • 石子合并
  • windows编译使用gtest
  • SpringBoot3 快速启动框架
  • VS2022中.Net Api + Vue 从创建到发布到IIS
  • Redis的常见数据结构
  • 内容中台驱动企业CMS架构优化与高效策略
  • springCloud-2021.0.9 之 GateWay 示例
  • 黄玮接替周继红出任国家体育总局游泳运动管理中心主任
  • 观察|印巴交火开始升级,是否会升级为第四次印巴战争?
  • 吴清:加强监管的同时传递监管温度,尽力帮助受影响企业应对美加征关税的冲击
  • 巴基斯坦所有主要城市宣布进入紧急状态,学校和教育机构停课
  • 文旅部:加强对景区索道、游船等设施设备安全隐患排查整治
  • 董卓的前半生:边荒之地的工具人