본문 바로가기

스터디/C++

C++ 손건의 흑역사 (재미있는 C++ 문제)

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