※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
일단 간한하게 소스와 결과로 확인해 보겠습니다.
예제 소스 )
#include <stdio.h>
struct AA{
int a;
char b;
}__attribute__((packed));
struct BB{
int a;
char b;
};
int main(void){
printf("AA-Size : %d\n",sizeof(struct AA));
printf("BB-Size : %d\n",sizeof(struct BB));
return 0;
}
실행
AA-Size : 5
BB-Size : 8
위의 결과만 봐도 예측이 가능하다.
packed는 메모리에 빈칸 없이 채우라는 소리이다.
int는 4바이트 char는 1바이트인데, 32비트 환경에서는 단위를 4바이트씩 잡기 때문에 char를 선언해도 4바이트를 잡게 된다.
이때 메모리 낭비가 생겨 __attribute__((packed));를 써서 빈칸없이 채우라고 선언 하는 것이다.
위에 보게 되면 __attribute__((packed));을 선언한것은 빈칸을 채워서 5바이트를 __attribute__((packed));를 선언하지 않은것은 빈칸을 포함해 8바이트 뜬것으로 확인 할 수 있다.
'프로그래밍 언어' 카테고리의 다른 글
| [C] const 포인터 (0) | 2014.08.11 |
|---|---|
| [C] 배열 초기화 방법 (0) | 2014.08.11 |
| [C] Linux C getopt() 함수 (0) | 2014.08.11 |
| [C] Linux C connect() 함수 (0) | 2014.08.07 |
| [C] Linux C close() 함수 (0) | 2014.08.07 |