'>'대신 '< ='을 확인하는 것이 더 비쌉니까?<=
첫 번째 것은 <과 ==를 모두 검사하지만 '>'는 하나만 검사합니다.
아니면 컴파일러가이를 최적화할까요?
'>'대신 '< ='을 확인하는 것이 더 비쌉니까?<=
첫 번째 것은 <과 ==를 모두 검사하지만 '>'는 하나만 검사합니다.
아니면 컴파일러가이를 최적화할까요?
비교 대상에 따라 다르지만 기본 제공 유형의 경우 일반적으로 둘 다 기계 명령어입니다.
눈에 띄는 차이는 거의 없습니다. 이런 종류의 최적화를 생각하고 있다면 올바른 일을 최적화하지 않는다고 생각합니다. 종류는 모두 연산자를 오버로드 할 수 있습니다 내장 된 비에 대한
당신이 원하는대로 : 비교 연산자는 당신이 당신의 운영을 최적화하고 <=
는 다른 방식으로 계산 될 수 수있는 응용 프로그램의 병목
class Foo
{
public:
bool operator<=(const Foo &other) const
{
}
bool operator<(const Foo &other) const
{
}
};
경우 <
및 ==
그리고이 대답의 요점은 무엇입니까? –
@AlexeyFrunze : 요점은 <= 다른 방식으로 구현 될 수 있고 <및 ==를 호출하는 것입니다. – Andrew
답변에 정교하고 가치가 있다고 생각합니다. –
을 호출하면 모두 동일한 비용이 발생합니다. 당신이 알고있는 표준 컴파일러를 사용하는 가정하지 멋진 일
컴파일러는 중요하지 않아야합니다. 둘 다 기계 수준에서 동일한 비용을 가져야합니다. – eds
번호 <=
는 기본적으로 추가하지와 >
과 동일하고, >=
는 NOT와 <
과 동일합니다. (어느 것이 든, 여분의 것이 있는지는 모르겠지만 하드웨어 수준에서는 본질적으로 동일합니다.)
대부분의 프로세서에서 결과는 조건 코드에 플래그를 설정하는 비교 명령이되고 그 다음에 조건부 점프가 발생합니다 조건 코드. 나는 비교에 관계없이 여분을 요구할 어떤 가공업자를 인식하고 있지 않다; 그들은 모두 6 개의 연산자 모두에 해당하는 조건부 점프 연산자를 가지고 있습니다. –
이것은 정수형 또는 이와 유사한 것으로 가정합니다. 부동 소수점의 경우'a <= b'는'! (a> b)'. 예를 들어, 'a'가 NaN이면 전자는 거짓이지만 후자는 참입니다. –
병목 현상이 있습니까? – Andrew
그것은 호기심과 완벽주의와 같아서 오히려 좋은 점이 있습니다. –
@DesmondHume : 여기에 동의 할 수 없습니다. 어셈블러에게 명령어를 배우고 세부 사항을 알고 싶다면, 상위 레벨 언어로 작성하고 싶다면 컴파일러/최적화 프로그램이 그 일을하도록하십시오. 두 표현식 중 하나가 다른 표현식보다 비싸다면 컴파일러는 프로그래머가 할 수있는 것과 같은 방식으로 하나를 다른 것으로 변환 할 수 있습니다. 장점은 컴파일러 **가 표현식의 비용과 생성 된 코드의 맥락에서 중요한 점을 알고 있다는 것입니다. 컴파일러는 일반적으로 평균 프로그래머가 세부 사항을 최적화하는 것보다 훨씬 더 나은 작업을 수행합니다. –