double a[2048 * 4] = {0,}, b[2048 * 4] = {1,};
double c[2048 * 4] = {0,}, dummy[8],d[2048 * 4] = {1,};
일 떄, 이중 포문을 돌린다고 했을 떄, 속도 차이가 있을까?
손건: 중간에 더미가 있으면 캐시가 오탐할 확률(?) 이 있으므로 위에가 더 빠르다.
우선 알아야 할 것이 있다.
1. Memeory fragmentation
--> 메모리에 적재를 했을 때, 프로그램과 프로그램 사이에 적재 되어 있던 프로그램이 사라졌을 때, 새로 들어갈 프로그램이 빈 공간보다 클 경우에 메모리에 적재되지 못하는 현상을 메모리 단편화 라고 한다.
A B
-------- --------
변수1
--------
변수2
변수2
--------
변수1
-------- --------
이 때 대부분의 컴파일러에서는 크기가 큰 변수2를 상대적으로 크기가 적은 변수1보다 낮은 위치에 두는 것을 지향한다. 만약 변수2가 빠졌다고 했을 때, 단편화 시선에서 본다면 최대 가용 메모리가 더 큰 A가 더 효율적이라고 생각한 결과다.
따라서 위 두줄을 이중포문 으로 돌려본다면, 컴파일러는 더미를 맨 앞으로 빼므로
결론적으로는 아무 성능차이가 나지 않는다.
이상 손건의 흑역사 끝.
(feat. 옥찬호형 손건)
'스터디 > C++' 카테고리의 다른 글
R-value, L-value -> Value-type (0) | 2015.03.24 |
---|---|
for문 한개와 두개의 성능차이. (0) | 2015.02.25 |
C++ 에서 Reflection 을 지원하지 않는 이유 (0) | 2015.02.25 |
20150114 스터디 정리 (0) | 2015.01.14 |
내용정리 1 (0) | 2015.01.11 |