문제

iPhone 앱에 성가신 문제가 있습니다. 최적화 레벨을 "없음"이외의 다른 것으로 설정할 때마다 계산 오류가 발생합니다. 이것은 iPhone SDK (iPhone Simulator가 항상 괜찮습니다)를위한 구축 할 때만 발생합니다.

릴리스 모드에서 최적화를 비활성화하는 것은 마음에 들지 않지만 응용 프로그램은 그렇게 할 때 너무 느립니다.

응용 프로그램은 복잡하므로 너무 적극적으로 최적화 된 부분을 찾기가 어렵습니다.

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당신의 기능에서 값을 ing. 내 경험에 따르면, 다음은 때때로 작동합니다.

int myFunc()
{
  x+7;
}

리턴 키워드의 고의적이고 안전하지 않은 누락에 유의하십시오.

표현식 계산에 사용되는 레지스터가 리턴 레지스터와 동일하기 때문에.

최적화가 켜져 있으면 사용 변경 사항을 등록하고 기능이 원하는 작업을 수행하지 못합니다.

컴파일러 경고를 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top