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

编译原理(5):链接

在编译阶段,编译器并不能直接知道函数的绝对内存地址(因为最终地址由链接器在链接时分配),但它可以确定函数的相对地址符号引用,并通过以下步骤实现“硬编码”函数调用:


1. 编译阶段:生成符号引用

当编译器处理 calc.add(2, 3) 时:

  1. 解析函数定义

    • 编译器在编译 Calculator::add 时,会为其生成一个符号名(如 _ZN9Calculator3addEii,这是经过名称修饰(Name Mangling)后的唯一标识)。

    • 符号名包含了类名、函数名和参数类型信息,确保全局唯一性。

  2. 生成调用指令

    • 编译器将 calc.add(2, 3) 转换为汇编指令 call _ZN9Calculator3addEii

    • 这里的 _ZN9Calculator3addEii 是一个符号引用,表示“需要调用该符号对应的函数”。

    ; x86-64 汇编示例
    lea  rdi, [rbp-16]   ; 传递 this 指针(calc 的地址)
    mov  esi, 2          ; 参数 a = 2
http://www.xdnf.cn/news/126649.html

相关文章:

  • Kafka命令行的使用/Spark-Streaming核心编程(二)
  • 17.磁珠在EMC设计中的运用
  • Happens-Before 原则
  • 理解js函数(Ⅱ)
  • CompletableFuture到底怎么用?
  • Code Splitting 分包策略
  • MobTech袤博ShareSDK集成错误 ld: symbol(s) not found for architecture arm64
  • 《一文读懂Transformers库:开启自然语言处理新世界的大门》
  • 【重走C++学习之路】18、map和set
  • 基于RFID的智能家居系统设计与实现
  • Spring—依赖注入注解
  • 从认证到透传:用 Nginx 为 EasySearch 构建一体化认证网关
  • 【Java 8新特性】Stream API 和 Lambda 表达式
  • MySQL数据库基本操作-DQL-基本查询
  • 多线程事务?拿捏!
  • 豆包桌面版 1.47.4 可做浏览器,免安装绿色版
  • [创业之路-382]:企业法务 - 企业如何通过技术专利与技术秘密保护自己
  • AI赋能Python长时序植被遥感动态分析、物候提取、时空变异归因及RSEI生态评估
  • WebServiceg工具
  • 虾皮(Shopee)商品详情 API 接口概述及 JSON 数据返回参考
  • 《Pinia 从入门到精通》Vue 3 官方状态管理 -- 基础入门篇
  • inih介绍
  • Fragment控件
  • Pytest安装
  • CVPR2025W | S-EO 遥感几何感知阴影检测大规模数据集, 将开源
  • 电商指标体系搭建 - AxureMost
  • Java虚拟机(JVM)家族发展史及版本对比
  • 利用 SSE 实现文字吐字效果:技术与实践
  • 【含文档+PPT+源码】基于SpringBoot+Vue的移动台账管理系统
  • 车载客流记录仪简介