예를들어서 뭐 for문을 돌릴때
값 'A' 를 값 'B'의 절반이랑 비교해야한다고 하면, 미리 변수(C)를 하나더 만들어서 거기다가 값 'B'의 절반을 집어넣고 A랑 비교하는거랑(A vs C) 그냥 'B/2'로 코드에다가 쓰고 비교하는거(A vs (B/2)) 랑 미세한 속도 차이가 있다고 들은적이 있는거같은데... 진짜야?
예를들어서 뭐 for문을 돌릴때
값 'A' 를 값 'B'의 절반이랑 비교해야한다고 하면, 미리 변수(C)를 하나더 만들어서 거기다가 값 'B'의 절반을 집어넣고 A랑 비교하는거랑(A vs C) 그냥 'B/2'로 코드에다가 쓰고 비교하는거(A vs (B/2)) 랑 미세한 속도 차이가 있다고 들은적이 있는거같은데... 진짜야?
ㅇㅇ - DCW
미리변수에넣으면 계산한번하고 그값을 저장해서 쓰는데 - DCW
1/2를 넣으면 실행될때마다 값을계산하니깐 - DCW
그게 아마 B/2랑 비교할려고 하면 B/2가 레지스터에 저장되고
C로 저장하면 일반 메모리에 저장되서 그런거 아닐까?
어셈에서 한다고 생각하면 돼
나누기 연산시간 vs 스택 접근시간 - 레지스터 접근시간 이건가??? 로우레벨잘알 등판 부탁드림
C에다가 저장하면 그 값을 레지스터로 불러와서 계산하고 끝
B/2를 쓰면 B를 레지스터에 불러오고 B/2값 계산해서 레지스터에 저장
그 이후 비교
B/2처럼 쓰면 매번 그렇게 하니까 느려질걸
물론 큰 차이는 없으니
생각해보니 b/2를 할때는 b를 불러와서 나누기까지 하는군요
컴파일러가 블록내에서 값변경이 없으면 알아서 최적화해줄껄?
그건 그렇지.. 요즘 컴파일러는 똑똑하니까
사실 요즘엔 우리가 직접 로우레벨 최적화하는 것보단 컴파일러가 해주는게 훨씬 나음
엄청난 고수가 아닌 이상에는..
오호... 글쿤