<=

2012-07-11 8 views
2
대신에>를 사용하는 C++ 최적화

'>'대신 '< ='을 확인하는 것이 더 비쌉니까?<=

첫 번째 것은 <과 ==를 모두 검사하지만 '>'는 하나만 검사합니다.

아니면 컴파일러가이를 최적화할까요?

+12

병목 현상이 있습니까? – Andrew

+3

그것은 호기심과 완벽주의와 같아서 오히려 좋은 점이 있습니다. –

+5

@DesmondHume : 여기에 동의 할 수 없습니다. 어셈블러에게 명령어를 배우고 세부 사항을 알고 싶다면, 상위 레벨 언어로 작성하고 싶다면 컴파일러/최적화 프로그램이 그 일을하도록하십시오. 두 표현식 중 하나가 다른 표현식보다 비싸다면 컴파일러는 프로그래머가 할 수있는 것과 같은 방식으로 하나를 다른 것으로 변환 할 수 있습니다. 장점은 컴파일러 **가 표현식의 비용과 생성 된 코드의 맥락에서 중요한 점을 알고 있다는 것입니다. 컴파일러는 일반적으로 평균 프로그래머가 세부 사항을 최적화하는 것보다 훨씬 더 나은 작업을 수행합니다. –

답변

15

비교 대상에 따라 다르지만 기본 제공 유형의 경우 일반적으로 둘 다 기계 명령어입니다.

4

눈에 띄는 차이는 거의 없습니다. 이런 종류의 최적화를 생각하고 있다면 올바른 일을 최적화하지 않는다고 생각합니다. 종류는 모두 연산자를 오버로드 할 수 있습니다 내장 된 비에 대한

3

당신이 원하는대로 : 비교 연산자는 당신이 당신의 운영을 최적화하고 <=는 다른 방식으로 계산 될 수 수있는 응용 프로그램의 병목

그래서
class Foo 
{ 
public:  
    bool operator<=(const Foo &other) const 
    { 

    } 

    bool operator<(const Foo &other) const 
    { 

    } 

}; 

경우 <==

+0

그리고이 대답의 요점은 무엇입니까? –

+0

@AlexeyFrunze : 요점은 <= 다른 방식으로 구현 될 수 있고 <및 ==를 호출하는 것입니다. – Andrew

+0

답변에 정교하고 가치가 있다고 생각합니다. –

0

을 호출하면 모두 동일한 비용이 발생합니다. 당신이 알고있는 표준 컴파일러를 사용하는 가정하지 멋진 일

+0

컴파일러는 중요하지 않아야합니다. 둘 다 기계 수준에서 동일한 비용을 가져야합니다. – eds

0

번호 <=는 기본적으로 추가하지와 >과 동일하고, >=는 NOT와 <과 동일합니다. (어느 것이 든, 여분의 것이 있는지는 모르겠지만 하드웨어 수준에서는 본질적으로 동일합니다.)

+1

대부분의 프로세서에서 결과는 조건 코드에 플래그를 설정하는 비교 명령이되고 그 다음에 조건부 점프가 발생합니다 조건 코드. 나는 비교에 관계없이 여분을 요구할 어떤 가공업자를 인식하고 있지 않다; 그들은 모두 6 개의 연산자 모두에 해당하는 조건부 점프 연산자를 가지고 있습니다. –

+0

이것은 정수형 또는 이와 유사한 것으로 가정합니다. 부동 소수점의 경우'a <= b'는'! (a> b)'. 예를 들어, 'a'가 NaN이면 전자는 거짓이지만 후자는 참입니다. –