컴파일러 최적화 문제를 처리하는 방법
-
10-07-2019 - |
문제
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;
}
리턴 키워드의 고의적이고 안전하지 않은 누락에 유의하십시오.
표현식 계산에 사용되는 레지스터가 리턴 레지스터와 동일하기 때문에.
최적화가 켜져 있으면 사용 변경 사항을 등록하고 기능이 원하는 작업을 수행하지 못합니다.
컴파일러 경고를 확인하십시오.