너무 많은 가변성이 있기 때문에 모든 언어, 데이터 형식, CPU 등에 대한 마스터 목록이 없습니다.
일부 언어에서 연산자는 동적으로 결정된 유형 지정 파견 함수 호출에 대한 문법적 설탕이므로 "a + b"는 몇 분이 걸리는 복잡한 함수 호출이 될 수 있습니다. "a * b"는 밀리 초가 걸리는 간단한 함수 호출 또는 그 반대의 경우.
컴파일 타임 유형이 고정되어있는 언어 (C++ 및 C++에 과부하가 있음에도 불구하고 C를 포함하여)에서는 컴파일 할 때 무엇이 호출 될지 결정할 수 있습니다. 여전히 최종 답을주지는 않습니다. (Dan D와 Alex의 답변도 참조하십시오.)
"확장 연산자"(+ = 등등)는 일반적으로 확장 작업 후 할당의 단축형입니다. 실제 작업에는 동일한 시간이 소요됩니다. 동적 유형 디스패치 (dynamic type dispatch)를 사용하는 언어에서는 보충 연산이 변수의 유형을 한 번만 조회해야하므로 보조 (비 연산자) 작업을 생략하는 경우가 있습니다. 정적 (컴파일 타임) 타이핑을 사용하면 컴파일러가 상당히 똑똑하고 단순한 a += b
유형의 작업은 런타임에 a = a + b
이상의 내용을 저장하지 않으므로 읽기가 쉽습니다. p->q->r->s += t
과 같은 더 복잡한 경우는 (까다로운 경우에) p->q->r->s
평가가 반복적으로 작성되면 반복적으로 수행되어야하므로 실제로 시간을 절약 할 수 있습니다.
는 기본 CPU 작업에 관해서는, 엄지 손가락의 몇 가지 규칙이 있습니다,하지만 당신은 사람이 적용되는 확인하기 위해 적절한 CPU 매뉴얼을 운반 할 수 있습니다
정수, 덧셈, 뺄셈, 그리고 논리 연산을 위해
- like 및/또는/xor는 다른 연산보다 느리지 않습니다.
- 정수의 경우 곱셈은 더하기보다 "더 어렵습니다"즉, 더하기보다 느릴 수 있지만 충분한 CPU가있는 한 여전히 매우 빠를 수 있습니다 - 그것에 전념 한 힘; 나누기가 곱셈보다 느리거나 여전히 빠름
- 부동 소수점 연산의 경우 더하기와 빼기가 곱셈과 나눗셈보다 "어렵습니다"따라서 느려질 수 있습니다 부동 소수점은 FPU 전용 임)
- FPU가없는 경우 부동 소수점은 정수보다 느립니다.
- 배럴 또는 퍼널 시프터가있는 경우 시프트가 항상 빠르지 만 그렇지 않은 경우에는 시프트가 더 오래 걸릴 수 있습니다 (예를 들어, x >> 4는 x >> 1보다 느릴 수 있습니다.)
- 최신 CPU의 경우, 위에서 언급 한 @Alex 명령어 스케줄링은 명령어의 순서에 따라 달라질 수 있습니다. , 도움이 될 수 있습니다.
- 캐시 효과 (캐시 라인의 특정 지점 근처에 분기를 배치하는 것은 물론 다중 레벨 캐시 누락 및 TLB 누락을 포함하여)는 영향을 완전히 막을 수 있습니다 일부 CPU에서 신중한 명령어 스케줄링 수행
이러한 종류의 것들은 최신 컴파일러 최적화 프로그램을 작성하는 것을 매우 까다롭게 만듭니다. :-)
연산자의 성능은 데이터 유형 등에 따라 크게 달라질 수 있습니다. 아마도 이진 산술, 부동 소수점 계산 등을 검색 할 수 있습니다. – joshuahealy