【问题标题】:How to generate different levels of optimization in the same source module?如何在同一个源模块中生成不同级别的优化?
【发布时间】:2012-01-04 05:12:17
【问题描述】:

我正在使用 GCC 构建我的嵌入式 C 应用程序,并使用 GDB 进行调试。该应用由一个在主机处理器上运行的程序和多个在多个加速器 DSP 内核上运行的程序组成。

我的主机(控制)程序有一个非常简单的主函数,其中有一个短循环调用一个更大的函数,该函数执行一些操作并激活加速器。我的问题是,在使用优化进行编译时,就主函数中的断点位置而言,调试更加困难。在构建 w/o 优化时,其他函数的编译不是最优的。

一种可能的解决方案是将宿主项目分成两个源文件并使用不同级别的优化。但是,我想将它保存在同一个文件中。

有没有办法(pragma?)指示编译器在同一个源单元中进行不同级别的优化?

【问题讨论】:

  • 我确实回答了,但您为什么不查看 GCC 的文档?
  • @BasileStarynkevitch - 感谢您的回答。实际上,我简要查看了安装时附带的 600 页 gcc 文档。诚然,它很简短,也许我错过了那部分。另一个原因可能是因为我不知道这个选项,它更像是“在黑暗中拍摄”。我们使用的版本是 GCC 4.4.3,就在上周我们开始处理 4.7。因此,根据您的回答,它在我们使用的旧版本中不可用。
  • 仅供参考:4.7 尚未发布!
  • 哦 - 旧版本是 4.3.0,而不是我上面写的。并不是说它真的很重要......
  • 然后请您的工具人员获取更新的 GCC 主干。 4.7 的第 1 阶段(最具实验性的一个)在几周前结束,所以我认为最近的主干(即 4.7)比 2011 年 7 月的主干更好。不要忘记经常更新你的 GCC 4.7:人们立即纠正其中的错误!

标签: debugging optimization gcc compiler-optimization


【解决方案1】:

使用最近的 GCC(例如 GCC 4.6),您可以使用function specific option pragmas 更改优化,例如

 #pragma GCC optimize ("-02")

您也可以使用function attributes

IIRC,它出现在 GCC 4.5 中,在 4.6 中效果更好,因此您需要最新版本的 GCC。

【讨论】:

    猜你喜欢
    • 2020-07-06
    • 2016-01-20
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2015-12-17
    • 1970-01-01
    相关资源
    最近更新 更多