Structure Packing

C/C++ 2017. 2. 2. 16:34

struct A {
     char a;
     int b;
};

를 만들고 sizeof(A)를 하면 당연히 5가 나와야겠지만 8이나온다.

인터넷을 찾아보니 structure의 멤버변수타입중 가장 큰값에 맞춰 alignment를 하기때문에 그렇다고 한다.
(b의 타입을 int가 아닌 short를 주면 sizeof(A)는 4가 나옴)

코딩을 하다보면 A의 size를 5로 만들어야 할 필요가 생긴다.
(padding을 없애야함)

방법은 생각보다 간단했다.

#pragma pack(push, 1)
struct A{
     char a;
     int b;
};
#pragma pack(pop)

이렇게 스트럭쳐를 #pragma pack으로 싸주면됨.
(2byte 로 align하고 싶으면 #pragma pack(push,2)를 하면된다)

다른 라이브러리에서 선언해놓은 스트럭쳐는 어떻게 padding을 없애는지 잘 모르겠다...ㅠ


Posted by outshine90
,