zoukankan      html  css  js  c++  java
  • gcc优化选项解析

    1 -fno-defer-pop

    函数返回的时候,就立即将栈里面放置的该函数的参数pop出来。这样可以避免函数参数占用过多的栈空间。

    2 -fforward-propagate

    ?

    3 -ffp-contract=style

    floating point expression contract,这个是FMA,fused multipy add

    用于计算x*y + z,其中x、y、z都是浮点数。有的处理器实现了fma指令。

    c99里面通过提供fma函数来支持fma。

    fma的特点是可以使得这种模式的浮点计算更快精度更高。

    普通的x*y + z用了两次rounding,第一次在计算x*y之后,会进行rounding,然后在和z相加,得到的结果再一次rounding。而使用fma计算的话,只会rounding一次,因此精度更高。

    4 -fomit-frame-pointer

    不要frame pointer,这样就可以减少每个函数保存frame pointer和恢复frame pointer的指令,加快程序的执行,毕竟这些指令都是要访问内存的。

    但是,backtrace就用不了了。

    5 -foptimize-sibling-calls

    这个选项会对sibling call,tail recursive call进行优化。首先,直接用jmp指令而不用call指令,这样的话,被掉用函数执行完后,不需要再跳回调用函数。其次,被调用函数直接用调用函数的栈,这样可以有效的节省内存空间,并且可以防止出现栈溢出。因为由于是sibling call,是调用函数执行的最后一条指令,并且栈空间足够大,留着原来的栈空间是没有用的,返回更是没有意义的,因此可以这样进行优化,但是问题是,如果f调用b,现在断在b中,想要去查看f的局部变量就查看不了了。

    6 -foptimize-strlen

    就是对c里面的字符串处理函数strlen、strcpy等进行优化,使之执行的速度更快。

  • 相关阅读:
    MongoDB环境配置
    Python之路【第二十七篇】:反射
    Socket网络通讯,TCP三次握手和四次释放,与UDP的差别
    iOS 常用第三方
    UISegmentedControl的使用
    OC取应用程序目录的路径
    KVC中setValuesForKeysWithDictionary
    KVC和KVO的简单对比
    C语言 内存和地址
    html基础知识
  • 原文地址:https://www.cnblogs.com/hustdc/p/7630109.html
Copyright © 2011-2022 走看看