티스토리 뷰
int data[100][10];
int sum=0;
A B
for(int i=0;i<100;++i) for(int j=0;j<10;++j)
{ {
for(int j=0;j<10;++j) for(int i=0;i<100;++i)
{ {
sum+=data[i][j]; sum+=data[i][j];
} }
} }
이 둘의 속도 차이는 있다.
B가 더 빠르다.
우선 차이는 A는 for문 한번당 10개의 일을 100번 하는 것이고
B는 for문 한번당 100개의 일을 10번씩 하는 것인데
이론적으론 같은 연산량이지만
일부 상황에서 (병렬 처리 등)에서 달라질 수 있으며
또, 캐시 히트율이 다르다. 배열은 일차원으로 저장된다.
공간적 지역성의 개념에 의해 할당된 순서대로 캐시에 가져오는 것이 더 빠르다.
이해가 안되나? 이 글을 읽어보게나.
(영어를 지원하지 않는데 한국어를 지원하는 아이러니... 심지어 번역기 돌린듯)
http://code.i-harness.com/ko/q/979d04