kyuseo의 게임 프로그래밍

int, short, byte 자료형의 복사, 비교 구문의 속도를 비교 분석 본문

C++ 개발

int, short, byte 자료형의 복사, 비교 구문의 속도를 비교 분석

kyuseo 2008. 3. 11. 18:19

개요..

 

int, short, byte 자료형의 복사, 비교 구문의 속도를 비교 분석해봅니다.

 

 

 

비교 분석

 

1. 아래코드 [A]를 복사하여 코드를 삽입하고

2. F9로 디버깅 브레이크를 설정하고

3. F5를 눌러 실행한 이후

4. Alt-8 을 눌러보면

5. [B] 와 같은 어셈블리 코드가 나옵니다.

 

[A]

 

    int t = 0;

    int a = 1;

    short b = 2;

    BYTE c = 3;

 

    int a0 = 1;

    short b0 = 2;

    BYTE c0 = 3;

 

    int a1 = a+a0;

    int a2 = a+b0;

    int a3 = a+c0;

 

    short b1 = b+a0;

    short b2 = b+b0;

    short b3 = b+c0;

 

    short c1 = c+a0;

    short c2 = c+b0;

    short c3 = c+c0;

 

    if( a < a0 )

        t = 0;

    if( a < b0 )

        t = 0;

    if( a < c0 )

        t = 0 ;

 

    if( b < a0 )

        t = 0;

    if( b < b0 )

        t = 0;

    if( b < c0 )

        t = 0 ;

 

    if( c < a0 )

        t = 0;

    if( c < b0 )

        t = 0;

    if( c < c0 )

        t = 0 ;

 

 

[B]

 

    79: int t = 0;

    0042CE73 mov dword ptr [ebp-14h],0

        80: int a = 1;

    0042CE7A mov dword ptr [ebp-18h],1

        81: short b = 2;

    0042CE81 mov word ptr [ebp-1Ch],offset CMainWnd::CMainWnd+365h (0042ce85)

        82: BYTE c = 3;

    0042CE87 mov byte ptr [ebp-20h],3

        83:

    84: int a0 = 1;

    0042CE8B mov dword ptr [ebp-24h],1

        85: short b0 = 2;

    0042CE92 mov word ptr [ebp-28h],offset CMainWnd::CMainWnd+376h (0042ce96)

        86: BYTE c0 = 3;

    0042CE98 mov byte ptr [ebp-2Ch],3

        87:

    88: int a1 = a+a0;

    0042CE9C mov edx,dword ptr [ebp-18h]

    0042CE9F add edx,dword ptr [ebp-24h]

    0042CEA2 mov dword ptr [ebp-30h],edx

        89: int a2 = a+b0;

    0042CEA5 movsx eax,word ptr [ebp-28h]

    0042CEA9 mov ecx,dword ptr [ebp-18h]

    0042CEAC add ecx,eax

        0042CEAE mov dword ptr [ebp-34h],ecx

        90: int a3 = a+c0;

    0042CEB1 mov edx,dword ptr [ebp-2Ch]

    0042CEB4 and edx,0FFh

        0042CEBA mov eax,dword ptr [ebp-18h]

    0042CEBD add eax,edx

        0042CEBF mov dword ptr [ebp-38h],eax

        91:

    92: short b1 = b+a0;

    0042CEC2 movsx ecx,word ptr [ebp-1Ch]

    0042CEC6 add ecx,dword ptr [ebp-24h]

    0042CEC9 mov word ptr [ebp-3Ch],cx

        93: short b2 = b+b0;

    0042CECD movsx edx,word ptr [ebp-1Ch]

    0042CED1 movsx eax,word ptr [ebp-28h]

    0042CED5 add edx,eax

        0042CED7 mov word ptr [ebp-40h],dx

        94: short b3 = b+c0;

    0042CEDB movsx ecx,word ptr [ebp-1Ch]

    0042CEDF mov edx,dword ptr [ebp-2Ch]

    0042CEE2 and edx,0FFh

        0042CEE8 add ecx,edx

        0042CEEA mov word ptr [ebp-44h],cx

        95:

    96: short c1 = c+a0;

    0042CEEE mov eax,dword ptr [ebp-20h]

    0042CEF1 and eax,0FFh

        0042CEF6 add eax,dword ptr [ebp-24h]

    0042CEF9 mov word ptr [ebp-48h],ax

        97: short c2 = c+b0;

    0042CEFD mov ecx,dword ptr [ebp-20h]

    0042CF00 and ecx,0FFh

        0042CF06 movsx edx,word ptr [ebp-28h]

    0042CF0A add ecx,edx

        0042CF0C mov word ptr [ebp-4Ch],cx

        98: short c3 = c+c0;

    0042CF10 mov eax,dword ptr [ebp-20h]

    0042CF13 and eax,0FFh

        0042CF18 mov ecx,dword ptr [ebp-2Ch]

    0042CF1B and ecx,0FFh

        0042CF21 add eax,ecx

        0042CF23 mov word ptr [ebp-50h],ax

        99:

    100: if( a < a0 )

        0042CF27 mov edx,dword ptr [ebp-18h]

    0042CF2A cmp edx,dword ptr [ebp-24h]

    0042CF2D jge CMainWnd::CMainWnd+416h (0042cf36)

        101: t = 0;

    0042CF2F mov dword ptr [ebp-14h],0

        102: if( a < b0 )

        0042CF36 movsx eax,word ptr [ebp-28h]

    0042CF3A cmp dword ptr [ebp-18h],eax

        0042CF3D jge CMainWnd::CMainWnd+426h (0042cf46)

        103: t = 0;

    0042CF3F mov dword ptr [ebp-14h],0

        104: if( a < c0 )

        0042CF46 mov ecx,dword ptr [ebp-2Ch]

    0042CF49 and ecx,0FFh

        0042CF4F cmp dword ptr [ebp-18h],ecx

        0042CF52 jge CMainWnd::CMainWnd+43Bh (0042cf5b)

        105: t = 0 ;

    0042CF54 mov dword ptr [ebp-14h],0

        106:

    107: if( b < a0 )

        0042CF5B movsx edx,word ptr [ebp-1Ch]

    0042CF5F cmp edx,dword ptr [ebp-24h]

    0042CF62 jge CMainWnd::CMainWnd+44Bh (0042cf6b)

        108: t = 0;

    0042CF64 mov dword ptr [ebp-14h],0

        109: if( b < b0 )

        0042CF6B movsx eax,word ptr [ebp-1Ch]

    0042CF6F movsx ecx,word ptr [ebp-28h]

    0042CF73 cmp eax,ecx

        0042CF75 jge CMainWnd::CMainWnd+45Eh (0042cf7e)

        110: t = 0;

    0042CF77 mov dword ptr [ebp-14h],0

        111: if( b < c0 )

        0042CF7E movsx edx,word ptr [ebp-1Ch]

    0042CF82 mov eax,dword ptr [ebp-2Ch]

    0042CF85 and eax,0FFh

        0042CF8A cmp edx,eax

        0042CF8C jge CMainWnd::CMainWnd+475h (0042cf95)

        112: t = 0 ;

    0042CF8E mov dword ptr [ebp-14h],0

        113:

    114: if( c < a0 )

        0042CF95 mov ecx,dword ptr [ebp-20h]

    0042CF98 and ecx,0FFh

        0042CF9E cmp ecx,dword ptr [ebp-24h]

    0042CFA1 jge CMainWnd::CMainWnd+48Ah (0042cfaa)

        115: t = 0;

    0042CFA3 mov dword ptr [ebp-14h],0

        116: if( c < b0 )

        0042CFAA mov edx,dword ptr [ebp-20h]

    0042CFAD and edx,0FFh

        0042CFB3 movsx eax,word ptr [ebp-28h]

    0042CFB7 cmp edx,eax

        0042CFB9 jge CMainWnd::CMainWnd+4A2h (0042cfc2)

        117: t = 0;

    0042CFBB mov dword ptr [ebp-14h],0

        118: if( c < c0 )

        0042CFC2 mov ecx,dword ptr [ebp-20h]

    0042CFC5 and ecx,0FFh

        0042CFCB mov edx,dword ptr [ebp-2Ch]

    0042CFCE and edx,0FFh

        0042CFD4 cmp ecx,edx

        0042CFD6 jge CMainWnd::CMainWnd+4BFh (0042cfdf)

        119: t = 0 ;

    0042CFD8 mov dword ptr [ebp-14h],0

 

 

결론

 

어셈블리 코드와 다수의 반복을 해보면 int -> int 가 가장 빠르고 다른 방법의 복사가 느림을 알 수 있습니다.

 

따라서 메모리를 절약 또는 편의성을 위해서 byte , short 형을 사용하는 것은 오히려 프로그램을 느리게 함을 알 수 있음을 기억하도록 합시다.

 

하지만 용량을 중요하게 여기는 서버의 경우, 네트워크 전송이나 용량을 고려하여 절충하여 사용해야 합니다.