티스토리 뷰
보통 구조체의 사이즈라 하면 구조체 내에 선언되어 있는 모든 변수의 총합을 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 |
전처리문 - #ifdef AND ... (0) | 2011.08.17 |
pthread_cond_wait, pthread_cond_signal (0) | 2011.08.17 |
tar compress/decompress (0) | 2011.08.08 |
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday