검색결과 리스트
글
프로그래밍 일반
2015. 5. 20. 18:02
컨테이너 순환문에서는 전위 증가 연산자를 사용하자
링크 : 어셈블리 기본
int i = 0;
int iPrefix = ++i; // 전위연산
int iPostfix = i++; // 후위연산
해당 코드의 결과는 프로그래머라면 누구나 알 수 있을 것이다.
그런데 두 연산자는 속도의 차이가 있을까?
필자는 전위 연산자가 더 빠르다고 배웠기 때문에 습관적으로 전위 연산자를 사용하고 있었는데 정말로 그런지 어셈코드를 확인해 보기로 했다.
코드를 보면 알 수 있지만 대입할 때 연산자 구현 차이만 있을 뿐 속도차이는 없다는 것을 알 수 있다. 1
그렇다면 객체에서는 어떨까?
객체의 경우 전위 연산자 처리가 훨씬 단순하다는 사실을 알 수 있다. 단지 스택 메모리를 추출 후 서브루틴으로 분기한다.
그에비해 후위 연산자는 상대적으로 처리가 복잡하고 코드를 잘 보면 컨테이너 소멸자까지 호출되고 있다.
Why??
std::list 코드를 열어보면
전위 연산자는 자신을 증가 시킨 후 참조형으로 리턴하고 후위 연산자는 임시 개체에 상태를 복사한 후 자신을 증가 시키고
복사된 임시 객체를 리턴 시키고 있다. 어셈코드가 설명이 되는 부분이다.
결론 int, float, char 등 내부 타입의 경우 성능상 차이가 없지만 객체는 전위 연산자를 사용하는게 더 빠르다.
- 증가 후 대입 대입 후 증가 [본문으로]
RECENT COMMENT