• C++学习--编译优化


    常量折叠

    把常量表达式的值求出来作为常量嵌在最终生成的代码中。

    疑问:对于一个很复杂的常量表达式,编译器会算出结果再编译吗?亦或者是把这个表达式完全翻译成机器码,最终留给程序去解决?

    分情况:

    • 涉及的常量折叠是否为语言规范所强制要求的,如果是,则符合规范的编译器就一定要(会)进行常量折叠。
    • 如果不符合上一条,那是编译器实现质量的问题。一个编译器可以自由选择是否做常量折叠优化。同一编译器有可能可以配置在不同的优化层级上工作,或许有些再低优化层级没有被常量折叠的代码,在高优化层级会被优化。

    常量传播

    考虑如下例子:

    int x = 40;
    int y = x + 2;
    

    像C语言、Java语言之类的,语言规范层面上都不会把y的初始化表达式 x + 2 规定为一个常量表达式。但我们直觉上觉得编译器应该能把它也给常量折叠起来。

    这就需要常量传播优化了。

    但是一个变量被允许多次赋值,如:

    int x = 40;
    x = rand();
    int y = x + 2;
    

    要实现常量传播,必须依赖『到达定值』的前向数据流分析 (fastword data-flow analysis)——确定某个定值能被传播到哪些使用点。

  • 相关阅读:
    直接拿来用 九个超实用的PHP代码片段(二)
    微信开发值得推荐的开源项目
    PHP文件下载原理
    简化PHP开发的10个工具
    CI Weekly #1 | 这份周刊,带你了解 CI/CD 、DevOps、自动化测试
    fir.im Weekly
    fir.im Weekly
    fir.im Weekly
    用 flow.ci 让 Hexo 持续部署
    fir.im Weekly
  • 原文地址:https://www.cnblogs.com/CocoML/p/12727165.html
Copyright © 2020-2023  润新知