2012-05-21 2 views
1

C++ 컴파일러가 성능을 극대화하기 위해 현재 "일반"루프와 같은 방식으로 범위 기반 루프를 언 롤할지 궁금하거나 범위 기반 루프가 일반 루프보다 느려지는지 궁금합니다.C++ 2011 : 범위 기반 루프 언 롤링?

대단히 감사합니다. 범위 기반 루프

+5

가능성은 컴파일러가 범위 기반의 루프를 일반 루프의 상대역으로 변환하므로 그 둘이 동일하다고 기대할 수 있습니다. –

+1

@ K-ballo : 아마도 이것을 답으로 게시해야합니까? –

답변

7

은 동일합니다 : 컴파일러는 반복 횟수를 알고는 루프 종속성 또는 루프가 독립적으로 해결할 수있는 경우

{ 
    auto && __range = (/expression/); 
    for (auto __begin = begin(__range), 
      __end = end(__range); 
     __begin != __end; 
     ++__begin) { 
    /declaration/ = *__begin; 
    /statement/ 
    } 
} 

, 다음 컴파일러는 않은 롤에게 무료로 제공됩니다.

일반적으로 루프 풀기는 작은 루프에 대해서만 성능을 향상시킵니다. 따라서, IMO, 범위 기반 루프가 전개되었는지 여부는 중요하지 않습니다. -O3-funroll-loops과 관련 옵션을 사용하여 벤치마킹 할 수 있으며 두 옵션간에 실제로 차이가 있는지 확인할 수 있습니다.

5

가능성은 컴파일러가 루프의 범위 기반 루프를 일반 루프 대응 코드로 변환하므로 해당 코드가 동일 할 것으로 예상됩니다.

관련 문제