4

我的 iPhone 应用程序有一个烦人的问题。每当我将优化级别设置为“无”以外的其他值时,都会出现计算错误。这只发生在为 iPhone SDK 构建时(iPhone 模拟器总是很好)。

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

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

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

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

4

3 回答 3

12

是的,这完全有可能。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) {
    /* ... */
}
于 2009-01-11T17:35:31.610 回答
4

如果优化改变了程序的行为,您可能会不知不觉地依赖于未定义或实现定义的行为。可能值得仔细查看您的代码,着眼于关于变量值和评估顺序的假设。

于 2009-01-11T18:10:12.977 回答
0

请检查您是否正确地return从您的函数中获取值。根据我的经验,以下方法有时有效:

int myFunc()
{
  x+7;
}

注意 return 关键字的故意和不安全的省略

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

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

检查您的编译器警告。

于 2010-01-08T10:09:23.383 回答