代码之家  ›  专栏  ›  技术社区  ›  Ronny Brendel

gcc 4.2.2中特定功能的关闭优化

gcc c
  •  13
  • Ronny Brendel  · 技术社区  · 17 年前

    是否可以关闭特定功能的优化? 我的一个朋友有一个问题,gcc优化使一些(我不知道)控制器代码无法工作。 我们知道它是哪些函数,但我们对代码本身没有任何线索,因此最简单和最安全的方法可能是在整个函数中关闭它。

    http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html 显示有一个优化函数属性/pragma,但它需要GCC4.4,而我们没有。

    7 回复  |  直到 17 年前
        1
  •  12
  •   frankodwyer    17 年前

    如果pragma不适用于您,请尝试将函数拆分为自己的文件,然后在不设置优化标志的情况下编译该文件。

        2
  •  7
  •   Jonathan Leffler    17 年前

    使用gcc启用优化时出现的最常见错误之一是使用严格的别名。确保所有警告都已启用,并查看是否有任何警告可以帮助您找出问题所在。如果你不能解决这个问题,试着把问题简化成一个小的、完整的程序,然后把它发布在这里。

        3
  •  5
  •   Nathan Kurz    17 年前

    正如其他人所指出的,罪魁祸首很可能是关于 'strict aliasing'

    如果失败,并且由于某种原因无法修复代码,则可以尝试禁用其他 optimization options

        4
  •  5
  •   Woodchuck Woodchuck    16 年前

    到目前为止,答案忽略了原始问题中的关键词,即“微控制器代码”。在编写此类代码以禁用时,这是非常常见的 优化——积极的优化器将“优化”整个语句 编码。对于一个应用程序在通常的编程空间,我来这里寻找 同样的信息,以避免卡汉求和的例行程序(见维基百科) 生成不同的程序行为会自动成为错误代码的标志。 巧妙地使用volatile关键字,在某些情况下,可以避免一些问题 应该生成实际的汇编语言并检查它。(我相信这一点 仍然可以使用-S开关(切换到gcc)完成。让我们记住C是用来 一种可移植的汇编程序,而不是一种COBOL。

    戴夫

        5
  •  3
  •   Jonathan Leffler    17 年前

    volatile ,从而向编译器表明,不应仅基于程序流对其内容进行任何假设。

        6
  •  3
  •   peng    16 年前

    我想这是一个简单的解决办法。只要把这个弄清楚,希望它能帮上忙

        7
  •  2
  •   DukeCityPal    15 年前

    较新版本的gcc解决了这个问题。我已经在gcc-4.5.1中成功地使用了它。