바꿀 수 있는 방법이 많음

 

임시 변수 이용

int a, b;
int t;
t = a;
a = b;
b = t;

수학적 사고 이용 ㅋㅋ

int a, b;
a = a + b;
b = a - b;
a = a - b;

xor 비트 연산자 이용

int a, b;
a = a ^ b;
b = a ^ b;
a = a ^ b;

 

속도를 비교해봤는데

 

Swap함수를 만들어서 두 변수를 파라미터로 참조하여 함수 안에서 바꾸게 하면 세개 다 속도가 비슷하게 나옴

Main(){
	for( roop ){
    	Sawp(a,b)
    }
}
Swap(int &a, int &b){
	...
}

 

 근데 함수 안쓰고 Main문 안에서 하면 속도차이가 발생함.

Main() {
	for( Roop ){
    	...
    }
}

대략 3000000000회 반복으로 돌렸을 때

임시 변수 : 6~7초

+,- 연산 : 14초

xor 연산 : 14초

정도 나옴.

 

임시변수쓸때는 레지스터와 메모리에 주소값 변경하는걸 내부적으로 하는것보다 
메모리에 있는 변수값 레지스터에 올리고 ALU 연산하는게 속도가 더 느린건가??

그나마 swap함수 안에 넣어놓으면 int t 변수가 swap함수 메모리에 올라가는 동작때문에 비슷한건가????

왜 이런걸까.. 궁금하네

 

암튼 결론 : 임시변수 쓰자.

 

 

+ Recent posts