计算机基础实战课
彭东
网名 LMOS,Intel 傲腾项目关键开发者
19719 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
计算机基础实战课
15
15
1.0x
00:00/00:00
登录|注册

国庆策划03|揭秘代码优化操作和栈保护机制

你好,我是 LMOS。
今天是国庆假期策划的第三期。我们来公布第一期主观题的答案。希望你先尝试自己梳理思路,尝试回答问题以后,再来查看参考答案。

第一题

在前面课程里,我们一起揭秘了 C 语言编译器的“搬砖”日常,搞清楚了 C 语言会如何处理各种类型变量、各种运算符、流程控制以及由它们组成的函数,并把这些内容加以转换,对应到机器指令。你知道在这个转换过程中,C 编译器为了提高程序的执行性能,会有哪些额外的操作吗?试试概括一下这些操作?

第一题参考答案

存在额外的操作,概括来说是对代码进行优化操作。
为了提高程序的执行性能,C 语言编译器在经过语义分析的阶段之后,会生成平台无关的中间代码,然后经历三次不同级别的代码优化。
这里首先要经历中间代码级的代码优化;而后,编译器把中间代码优化的结果作为输入,生成机器相关的目标代码;之后还会再经过一次目标代码级别的代码优化,这个优化策略和具体机器的硬件结构高度相关,且不通用。
完成了整个优化过程后,就会产生最终运行机器平台上的目标代码了。一般通用的优化代码操作具体包括四个方面,我们挨个来看看。
第一类操作是删除多余运算。编译器分析中间代码的时候,可能会发现一些计算操作属于重复计算。因为有些计算并没有让结果发生变化,它们是多余的,完全可以删除。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文主要介绍了代码优化操作和栈保护机制。在代码优化方面,C语言编译器为了提高程序执行性能,会进行中间代码级和目标代码级的优化,包括删除多余运算、代码外提、强度削弱和合并已知量等操作。而在栈保护机制方面,介绍了编译器和操作系统的栈保护措施,包括对栈内缓冲区溢出的检查、页表的NX位设置、地址空间分布随机化和栈溢出保护canary技术。这些措施可以有效防止栈中数据被破坏,从而提高程序的安全性。文章内容涵盖了代码优化和安全机制,对于想要了解这些技术特点的读者来说,是一份很有价值的参考资料。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《计算机基础实战课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • peter
    请教一个问题: Q1:随机地址是物理地址还是虚拟地址? 文中提到的ALSR方法,会把地址空间进行随机化分布,请问被随机化分布的地址是物理地址还是虚拟地址?

    作者回复: 虚拟地址

    2022-10-08归属地:湖北
  • LockedX
    彭老师可以开一个编译器的课程,编译器可太有意思了^_^

    作者回复: 可以安排

    2022-10-08归属地:湖北
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部