高级C/C++编译技术之读书笔记(一)之编译/链接

本节思维导图1.计算机体系结构抽象2.进程内存映射布局(1)代码节:供CPU执行的机器指令码(.text节)(2)数据节:供CPU操作的数据,通常来说,初始化数据(.data)、未初始化数

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

                                                                                    高级C/C++编译技术之读书笔记(一)之编译/链接

  最近有幸阅读了《高级C/C++编译技术》深受启发,该书深入浅出地讲解了构建过程(编译、链接)中的各种细节,从多个角度展示了程序与库文件或代码的集成方法,提出了面向代码复用和系统集成的软件架构设计方法,以及系统开发过程中疑难问题的解决方案。

  以下将回头记录下其中的关键要点,以便后面查阅。

本节思维导图

  高级C/C++编译技术之读书笔记(一)之编译/链接

1. 计算机体系结构抽象

  高级C/C++编译技术之读书笔记(一)之编译/链接

2. 进程内存映射布局

高级C/C++编译技术之读书笔记(一)之编译/链接

(1)代码节:供CPU执行的机器指令码(.text节)

(2)数据节:供CPU操作的数据,通常来说,初始化数据(.data)、未初始化数据(.bss)、和只读数据(.rdata)会保存在分量的节中

(3)堆:动态内存分配的区域

(4)栈:为各个函数提供独立的存储空间

(5)最上层部分属于内核区域,特定进程的环境变量就存放在该区域

3. 编译阶段

  编译的目的就是将高级语言转换为机器可以识别和执行的机器语言(汇编或二进制),主要过程包括:

(1)预处理:将#incldue关键字标识的含有定义的文件包含到源代码文件中、将#define语句指定的值抓换为常量、在代码中调用宏的位置将宏定义转换为代码、根据#if/#elif和#endif指令的位置包含或排除特定部分的代码

(2)语言分析:将代码转换为更易于处理的形式(删除注释和不必要的空格,以及从文本中提取符号等操作),检查程序是否满足编程语言的语法规则。包括词法、语法和语义分析

(3)汇编阶段

(4)优化阶段:将程序的寄存器使用率最小化,预测出实际上不需要执行的代码,并将其删除

(5)代码生成阶段

4. 链接阶段

  连接过程的输入是目标文件的集合,其中由编译阶段预先生成,每个目标文件可以被看作单个的源代码的二进制存储版本,需要为程序内存映射提供各种各样的节(代码,初始化数据,未初始化数据,调试信息等)。连接器的最终任务是将独立的节组合成最终的程序内存映射节,与此同时解析所有的引用,为不同部分的代码间建立关联,使得程序称为一个整体。

  (1)重定位:完成内存因素各行

  (2)解析引用:检测拼接到程序内存映射中的节,找出哪些部分代码产生了外部调用,计算该引用的精确地址,将机器指令中的伪地址替换成程序内存映射的实际地址

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120111.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月28日 下午6:00
下一篇 2021年12月28日 下午7:00


相关推荐

  • 什么是通配符掩码

    什么是通配符掩码通配符掩码(WildcardMask)—通配符掩码(WildcardMask)是一个32位的数量,用在与一个IP地址的联合上来决定在一个IP地址的那个位应该不忽略,在将那个地址与另一个IP地址相比时。一个通配符掩码在设置接入列表时被指定。路由器使用的通配符掩码(或者称作反掩码)与源或目标地址一起来分辨匹配的地址范围,它跟子网掩码刚好相反。它像子网掩码告…

    2022年7月24日
    12
  • 博客备份工具BlogDown 软件使用感想

    博客备份工具BlogDown 软件使用感想最近在找博客备份相关的工具,看到了一个不错的博客备份工具BlogDown。使用博客备份BlogDown工具是可以制作博客电子书的。他支持导出多种文件格式,包括常用的电子书格式chm,还有word格式doc而且他导出的文件中包含博客中的图片,无用联网,是真正的博客图片备份,不是只备份图片地址。对于我们这些博客爱好者来说是很好的工具,对于文章的收藏也很方便。在博客爱好者中,刚开

    2022年7月25日
    14
  • GetDlgItem的用法

    GetDlgItem的用法CLabel cLabelStateA MAX SUPPORT PORT NUM CLabel cLabelTipsAr MAX SUPPORT PORT NUM CEdit cEditNameArr MAX SUPPORT DATA NUM CEdit cEditCrcArra MAX SUPPORT DATA NUM CButton cButtonCKArr MAX SUPPORT DATA NUM 初始化控件 cLabelStateA

    2026年3月16日
    2
  • Python的strftime函数与calendar模块函数

    Python的strftime函数与calendar模块函数Python 的 strftime 函数与 calendar 模块函数一 strftime 函数二 使用步骤 1 引入库 2 读入数据总结一 strftime 函数 strftime 函数的调用格式为 strftime 日期格式 表示按指定的日期格式返回当前日期二 使用步骤 1 引入库代码如下 示例 importnumpya pyplotasplti

    2026年3月16日
    1
  • java中逻辑运算符怎么理解_java 逻辑运算符理解

    java中逻辑运算符怎么理解_java 逻辑运算符理解1 1 逻辑运算符逻辑运算符 它是用于布尔值进行运算的 运算的最终结果为布尔值 true 或 false 运算符运算规则范例结果 amp 与 false amp trueFalse 或 false trueTrue 异或 true flaseTrue 非 trueFlase amp amp 短路与 false amp amp trueFalse 短路或 false trueTrue 看完图后 我们来看一下逻

    2026年3月19日
    2
  • 什么时候PHP经验MySQL存储过程

    什么时候PHP经验MySQL存储过程

    2022年1月4日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号