【发布时间】:2011-04-20 18:10:51
【问题描述】:
我在使用 GCC for ARM 并启用了优化时遇到了一个非常奇怪的问题。 在没有优化的情况下编译我的 C++ 应用程序会生成一个可执行文件 在运行时输出预期结果。我一打开 优化 - 即 -O1 - 我的应用程序无法产生预期的结果。 我尝试了几天来发现问题,但我一无所知。 我从我的代码中消除了任何未初始化的变量,我纠正了那些地方 严格的别名可能会导致问题,但我仍然没有正确的结果。
我正在为 ARM 使用 GCC 4.2.0(处理器是 ARM926ej-s)并运行应用程序 在 Montavista Linux 发行版上。
以下是我正在使用的标志:
-O1 -fno-unroll-loops fno-merge-constants -fno-omit-frame-pointer -fno-toplevel-reorder \
-fno-defer-pop -fno-function-cse -Wuninitialized -Wstrict-aliasing=3 -Wstrict-overflow=3 \
-fsigned-char -march=armv5te -mtune=arm926ej-s -ffast-math
只要我去掉 -O1 标志并重新编译/重新链接应用程序,我就会得到正确的输出结果。正如您从标志中看到的那样,我试图禁用任何我认为可能会导致问题的优化,但仍然没有运气。
有人对我如何进一步解决这个问题有任何建议吗?
谢谢
【问题讨论】:
-
什么是“预期结果”?您是否在选择了错误的“if”分支或计算错误时出现逻辑错误?你确定你所有的变量都正确初始化了吗?
-
计算错误。是的,我很确定所有变量都已正确初始化。
-
这就像在说“我很确定我的代码是正确的,为什么它不起作用?” ;)
-
@jalf:不,这就像说“我真的检查过我的所有变量都已正确初始化并具有正确的默认值”。我很确定代码在所描述的特定场景中的其他方面不正确。
-
我的意思是“相当肯定”并不是真的有用。如果您不确定 100%,那么它仍然是一个不应忽视的潜在错误源。 :) 调试时,只有“绝对确定”和“不确定”;)
标签: c++ gcc compiler-optimization fast-math