Visual Basic 6

>와 >=의 연산차이?





















친구가

>와 >=가 연산과부화를 일으킨다고 해서 한번 허접한 실력으로 파봤다.


맨 처음 사진 두장은 소스다. 

개인적으로 베이직이 편해서 했다.


주파수속도였나.. 그게아니라 그냥 간단하게 ms단위의 GetTickCount API를 이용했다. (사실 이거밖에 할줄모른다... query엿나 신기한거있던데..)



간단하게 총 3개의 결과가 나온다.

첫번째는 GetTickCount API의 속도검사 신뢰도측정 (3번째사진)

두번째는 c=a>b 연산 10회평균(4번째사진)

세번째는 c=a>=b연산 10회평균(5번째사진)


1ms정도 차이가 난다. 

1천번의 반복에 벌써 1ms면 차이가 있는편일거다.



그런데 내가 이 글을 쓰면서 하나 발견했는데

첫번째 썼던 c 변수를 두번째에서 쓰면 당연히 두번째가 

이미 자주사용하는 변수의 포인터로써 register에서 자주들락날락거릴수 잇는 위치로 cpu가 알아서 배치할거라 생각했다.


그래서 d라는 변수를 또 만들었다. 


그랬더니 아예 똑같이 나오기까지 했다. (두어번 테스트를 했다.)



그래서 되지도 않는 허접한 실력으로 리버싱을 해봤다.

올리디버거로 뜯어보니


>와 >=의 로직은 같았다고나할까...... (으아닛 이게 결론인게냐...?)


미안하다 오덕말투....... 데헷 ><

ㅈㅅ...



>의 로직의 경우에도 JE와 CMP를 쓰고 

>=도 JE와 CMP를 쓴다.


아마 이 글을 본 고수님이라면 제발 저좀 갈쳐주세염 흐접이에여..제발..



JE는 Jump if Equal의 약자로 두 값이 동일한지를 검사한다.

CMP는 기본적인 비교구문이다(라고알고잇다).


>의 경우에는

1. 같은지 검사한다. -같나? 그럼 False

2. 다르다면, 큰지 작은지 비교해본다. 


>=의 경우에는

1. 같은지 검사한다. -같나? 그럼 True

2. 다르다면, 큰지 작은지 비교해본다.


인거같다.


둘다 같은 어셈을 쓴다는거. 



왜 >의 경우에 바로 큰지작은지 검사를 안하나요? 하겠지만


내 짧은 소견으로는 이러하다.


두 값의 대소를 비교하기보다는 

두 값이 같은지를 검사하는게 더 빠를거다. (이것부터 가정..)


그렇다면 최대한 더 속도를 빠르게하기위해서 두 값이 같은지를 검사할거다.


아마 두값이 같았다면 비교했던거보다 더빠른 속도로 False를 반환할수잇을테니까.


>=의 경우에도 다를바가 없다.







저좀가르쳐주세요 ㅠㅠ


,

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

Today :
Yesterday :
Total :

태그