Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2918381
  • 博文数量: 401
  • 博客积分: 12926
  • 博客等级: 上将
  • 技术积分: 4588
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-22 14:51
文章分类

全部博文(401)

文章存档

2015年(16)

2014年(4)

2013年(12)

2012年(82)

2011年(98)

2010年(112)

2009年(77)

分类: C/C++

2009-06-17 10:53:40

最近搞一个串口烧code的东西,搞了半天经常莫名其妙的出错,改了不相关的code都会影响!发现是编译器优化的问题,makefile里default的编译选项是-Os。。。只见过-O0 -O1 -O2 -O3,从来没见过-Os。。。以后遇到莫名其妙的问题的时候~如果不知道具体是哪个变量引起的(volatile可以解决)时候~就把整体编译优化选项降低~~也许会有意想不到的收获~~~

下面是gcc的man手册


       -O

       -O1    优化. 对于 大函数, 优化编译 占用 稍微多 的 时间 和 相当大 的 内存.

              不使用 ‘-O’ 选项 时, 编译器 的 目标 是 减少 编译 的 开销, 使 编译结果 能够 调试.  语句 是 独立的: 如果 在 两
              条语句 之间 用 断点 中止 程序, 你 可以 对任何 变量 重新 赋值, 或者 在 函数体 内 把 程序计数器 指到 其他语句,
              以及 从 源程序 中 精确地 获取 你 期待 的 结果.

              不 使用 ‘-O’ 选项 时, 只有 声明了 register 的 变量 才 分配使用 寄存器.  编译结果 比 不用 ‘-O’ 选项 的 PCC 要
              略逊一筹.

              使用了 ‘-O’ 选项, 编译器 会试图 减少 目标码 的 大小 和 执行时间.

              如果 指定了 ‘-O’ 选项, ‘-fthread-jumps’ 和 ‘-fdefer-pop’ 选项 将被 打开. 在 有 delay slot 的 机器 上, ‘-fde‐
              layed-branch’   选 项   将 被   打 开.   在   即 使   没 有   帧 指针 (frame pointer) 也支持 调试的 机器 上,
              ‘-fomit-frame-pointer’ 选项 将被 打开. 某些机器 上 还可能会 打开 其他选项.

       -O2    多优化一些. 除了 涉及 空间 和 速度 交换 的 优化选项, 执行 几乎 所有的优化工作. 例如 不进行 循环 展 开  (loop
              unrolling)  和 函数内嵌 (inlining). 和 -O 选项 比较, 这个选项 既增加了 编译时间, 也提高了 生成代码 的 运行效
              果.

       -O3    优化的更多. 除了 打开 -O2 所做的 一切, 它 还 打开 了 -finline-functions 选项.

       -O0    不优化.

阅读(4234) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~