티스토리 뷰

개발/Linux

struct size의 오해와 진실...

Jaeyeon Baek 2011.08.25 20:30
보통 구조체의 사이즈라 하면 구조체 내에 선언되어 있는 모든 변수의 총합을 TOTAL로 여깁니다. 얼핏 보면 당연한 결과지만, 컴파일러는 그렇게 못합니다. 이는 컴파일러 내에서 구조체 관련 루틴을 수행할 때에 좀 더 빠른 연산을 위함인데, 그렇다면 어떻게 다른지 알아봅니다.
#include <stdio.h>  

typedef struct test{
    int a;
    long c;
    char b;
    char d:1,
         e:1,
         f:1,
         g:2,
         i:1,
         k:1;
    long h;  
} test; 

int main(void)
{
    test k;
    k.g=1;  //    printf("a:%d \n",k.g);
    printf("size : %d\n",sizeof(k));
    return 0;  
}


간단한 코드입니다, test struct의 사이즈는 얼마일까요? 64bit 머신을 기준으로  32byte입니다 (long 8byte). 의아하지 않나요? 보통은 int-4byte,char-1byte이므로, 총 4+8+1+1+8 = 22byte 라고 여길텐데 말입니다,

답은 간단합니다, 컴파일러는 아래와 같은 그림을 그립니다.

int (4byte)

 

 

 

 

long (8byte)

Char(1)

Char(1)

 

 

 

 

 

 

Long (8byte)

 

가장 큰 자료형을 기준으로 사이즈를 측정한다고 보면 됩니다, 남은 공간은 그냥 두고, 채울 수 있는 만큼만 채워서 구조체의 사이즈를 정의합니다. 이 테스트 코드에서 test struct는 8byte의 공간이 놀고 있는 샘이 되겠지요...

놀고 있는 공간이 없도록 코딩할때 구조체 안에 변수를 꼼꼼하게 선언하도록 합시다,


'개발 > Linux' 카테고리의 다른 글

drop_caches (caches flush)  (0) 2011.09.05
회선 대역폭 측정 (iperf)  (0) 2011.08.31
struct size의 오해와 진실...  (0) 2011.08.25
전처리문 - #ifdef AND ...  (0) 2011.08.17
pthread_cond_wait, pthread_cond_signal  (0) 2011.08.17
tar compress/decompress  (0) 2011.08.08
댓글
댓글쓰기 폼