我的iPhone应用程序遇到了烦人的问题。每当我将优化级别设置为“无”以外的其他级别时,我就会遇到计算错误。这只发生在为iPhone SDK构建时(iPhone模拟器总是很好)。
我不介意在发布模式下禁用优化,但是当我这样做时应用程序有点太慢了。
应用程序很复杂,因此很难找到过于积极优化的部件。
我认为问题出在GCC方面,因为它似乎在优化ARM架构的代码时遇到了问题。
有没有办法只对代码的某些部分禁用优化?你会如何处理这类问题?
答案 0 :(得分:12)
是的,这完全有可能。海湾合作委员会有一个attribute:
/* disable optimization for this function */
void my_function(void) __attribute__((optimize(0)));
void my_function(void) {
/* ... */
}
将该功能的优化级别设置为-O0
。您可以启用/禁用特定优化:
/* disable optimization for this function */
void my_function(void) __attribute__((optimize("no-inline-functions")));
void my_function(void) {
/* ... */
}
答案 1 :(得分:4)
如果优化改变了程序的行为,您可能会在不知不觉中依赖于未定义或实现定义的行为。值得仔细研究一下您的代码,并着眼于对变量值和评估顺序的假设。
答案 2 :(得分:0)
请检查您是否正确return
来自您的功能的值。根据我的经验,以下有时只能起作用:
int myFunc()
{
x+7;
}
请注意return关键字
的故意和不安全遗漏由于表达式计算中使用的寄存器与返回寄存器相同。
当启用优化时,注册使用更改并且该功能无法执行您想要的操作。
检查编译器警告。