我的iPhone应用程序遇到了烦人的问题。每当我将优化级别设置为<!>“无<!>”之外的其他内容时,我就会遇到计算错误。这只发生在为iPhone SDK构建时(iPhone模拟器总是很好)。

我不介意在发布模式下禁用优化,但是当我这样做时应用程序有点太慢了。

应用程序很复杂,因此很难找到过于积极优化的部件。

我认为问题出在GCC方面,因为它似乎在优化ARM架构的代码时遇到了问题。

有没有办法只对代码的某些部分禁用优化?你会如何处理这类问题?

有帮助吗?

解决方案

是的,这完全有可能。 GCC为此提供了属性

/* 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) {
    /* ... */
}

其他提示

如果优化改变了程序的行为,您可能会在不知不觉中依赖于未定义或实现定义的行为。值得仔细研究一下您的代码,并着眼于对变量值和评估顺序的假设。

请检查您是否正确return从您的功能中获取值。根据我的经验,以下有时只能起作用:

int myFunc()
{
  x+7;
}

请注意return关键字

的故意和不安全遗漏

由于表达式计算中使用的寄存器与返回寄存器相同。

当启用优化时,注册使用更改并且该功能无法执行您想要的操作。

检查编译器警告。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top