2013-07-28 8 views
1

일부 블로그에서이 문제를 발견했습니다. 다음 두 루프가 주어 졌는데, 그 중 하나는 더 빠르다는 것입니다.왜 내림차순으로 루프가 오름차순으로 증가하는 것보다 빠릅니까?

for(int i = 100000; i > 0; i--) {} 
for(int i = 1; i < 100001; i++) {} 

왜 첫 번째 것이 두 번째 것보다 빠릅니까?

+18

벤치 마크가 발생했거나 발생하지 않았습니다. – Mysticial

+0

차이가있을 경우 나노초 단위로 측정됩니다. – Bohemian

+1

아마도 루프 자체보다 루프에서 무엇을하는지에 따라 달라집니다. 이 미세 최적화 경로를 따라 가면'++ i'가'i ++'보다 빠르다는 것을 알았습니까? –

답변

6

일부 컴파일러에서 생성 된 일부 프로세서의 경우 첫 번째 값인 은 값이 0과 비교되기 때문에 일 수 있습니다. @DeadMG 노트는 1985 년

전에 x86 프로세서, 예를 들어, 적용 그러나이므로 :

  • 조기 최적화 만이 때문에 이유의 두 번째로 첫 번째 라인을 변경하지 마십시오 ! 도널드 크 누스는 한 번 말했다 내가 완전히 우리는 작은 효율성에 대해 잊지한다

은 약 97 %의 시간을 말하는 그에게 동의 : 조기 최적화는 모든 악의 뿌리입니다.

  • 비 휴대용 최적화 - 더 빨리 일부 특정 경우에 일부 특정 프로세서에서 작동합니다! 그리고 높은 확률로 다른 아키텍처에서는 동일하지만 느려질 수 있습니다.

경고 메시지가 표시됩니다.

+1

을 참조하십시오. 예를 들어 1985 년 이전의 x86 프로세서에서만 그렇습니다. 따라서이 프로세서가 적용되는 프로세서에 대해 훨씬 더 구체적으로 설명하고 싶을 수 있습니다. – Puppy

+0

그리고 C로부터의 캐리 오버입니다. 여기서 조건은 간단히'i', 즉'for (int i = 100000; i; i -)'로 코딩 할 수 있습니다. – Bohemian

관련 문제