어셈블리어를 청강하면서 듣고있는데
이중포문을 쓰잖아..
근데
for(i=0;i<10;i++)
{
for(j=0;j<500;j++){}
}
이거랑
for(i=0;i<500;i++)
{
for(j=0;j<10;j++){}
}
이거랑 속도차이가 있는거냐?
예문이
for(i=0;i<10;i++)
a3000190 ldr r2,0xa30001dc
a3000194 mov r1,#0
a3000198 mov r3, r1
a30001ac add r1,r1,#1
a30001b0 cmp r1,#0xa
a30001b4 blt 0xa300019c
for(j=0;j<500;j++)
a300019c mov r0,r3
a30001a0 add r0,r0,#1
a30001a4 cmp r0,r2
a30001a8 blt 0xa3000a0
이거였는데
난 아무리 반대로 돌려봐도 똑같은 클럭이 나오는데
대체 뭐가 다른거냐 이거..
그냥 다르다. 이렇게 나오니까 환장하겠네
for(i=0;i<500;i++)
a3000190 ldr r2,0xa30001dc
a3000194 mov r1,#0
a3000198 mov r3, r1
a30001ac add r1,r1,#1
a30001b0 cmp r1,#0xa
a30001b4 blt 0xa300019c
for(j=0;j<10;j++)
a300019c mov r0,r3
a30001a0 add r0,r0,#1
a30001a4 cmp r0,r2
a30001a8 blt 0xa3000a0
위에꺼랑 아래꺼랑 차이가 있는거냐 이거..
컴파일러차이
컴파일러 차이가 아니라 계산하다보면 다르다는데 1x500이나 500x1이나 똑같은거 아니냐..위에 코드에서 다른점이 있는거냐 이거..
전자가 더 나아보인다 뭔가 ㅋ
10 - 500 이 더 걸릴꺼같은데 점프횟수가 더 많으니까..아닌가 ㅋ
C언어초보/ 점프횟수가 더 많다는 의미가? blt명령어의 점프횟수?
10-500이 더 빠르대..500-10보다
잠만 더 분석해봐야겠다 개 햇갈리네 슈ㅟ발
아 맞네 500-10이 더 빠를것같네 10끝나고 다시 위 포문으로 점프하는데 10-500같은경우는 이걸 10번만 하면되고 , 후자의경우 이걸 500번 해야되네
500 - 10은 10에서 10번돌는건 똑같고 500에서 500도는건똑같은데 10에서 500으로 갈때 점프를 10번만하는데 후자는 이걸 500번함..
500-10이 더 빠른거같다고?
계산하는방법이 따로 있냐? 뭐 듣기로는 mov cmp add는 1레지스터고 blt는 5레지스터라고 했던거같은데..레지스턴가 클럭인가..
ㅇㅇ
그런건 모르겟고 그냥 단순히 명령어 실행 횟수가 더 많은것 같은대
명령어 실행횟수가 전자나 후자나 10*500이나 500*10이나 똑같지 아니함?
걍 느낌상 10- 500이 더 빨라보이는데? 걍 딱봐도 달리기 500초하고 잠깐쉬고 500초뛰고 잠깐쉬고 10번반복과 10초뛰고 잠깐쉬고 10초뛰고 잠깐쉬고 이걸 500번해봐라 당연히 승질나서라도 닥전
시발 이해가 안돼 ㅋㅋㅋㅋ 아 짜증난다 ㅋㅋㅋㅋ
머리는 뒀다 뭐하려고