본문 바로가기

프로그래밍 언어

[C] __attribute__((packed)); 사용 하는 이유

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.




일단 간한하게 소스와 결과로 확인해 보겠습니다.


예제 소스 )

#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