>> Edit article
이름
제목
패스워드
: <PRE>안녕하세요. : : 프로그래밍하다 보면 2개의 값을 바꾸는 SWAP 함수가 많이 필요하게 되죠. : 이렇게 간단한건 함수로 구현하기 보다는 매크로로 사용하는 것이 속도면 에서 : 아무래도 유리합니다. : : 다음은 XOR을 이용한 SWAP 매크로 구현입니다. : : #define SWAP(a, b) ((a)^=(b)^=(a)^=(b)) 누군가가 접속한 게시판의 글을 지나가는 길에 우연히 읽고 적습니다. bitwise XOR 연산을 이용한 swap 매크로는 오래된 trick 입니다. 이 매크로는 많은 "이식성없는" 행동에 의존하고 있습니다 - 일단, a, b 의 type 에 크게 의존합니다 - a, b 의 type 이 다르거나 signed 정수 형일 경우 행동은 전혀 이식성을 갖지 못합니다. 더군다나 위의 수식은 두개의 sequence point 사이에서 한 대상체의 값 을 두번이상 수정하므로 표준 (C90, C99) 에 따르면 undefined behavior 입니다 - 보통 위의 trick 은 하나의 수식으로 합쳐진 형태 보다는 각 대입마다 쉼표 연산자를 두어 sequence point 를 명확히 합 니다 - 그래도 이식성이 없음에는 차이가 없지요. 더군다나 a, b 가 같은 대상체일 경우 (즉, SWAP(a, a)) 에는 올바른 결과를 보이지도 않습니다. 위의 다양한 "이식성 없는" 사항들이 보장되고, 약 1억번의 루프안에서 몇십번씩 swap 이 실행된다면 써볼만한 trick 이겠지만, 저같으면 제 프로그램의 이식성을 떨어뜨리느니, 지극히 정상적인 방식의 swap 함수 를 inline 함수로 작성하여 사용하겠습니다 - 몇몇 똑똑한 컴파일러는 정상적인 swap 이 보이면 적절한 레지스터 최적화로 좋은 성능을 보여 주기도 합니다. 그럼...--Jun Woong (mycoboco@hanmail.net) Dept. of Physics, Univ. of Seoul Cell: +82 16 467 6247 Web : http://c-expert.uos.ac.kr
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved