#pragma pack

C/C++/VC++ / MFC 2008. 2. 20. 17:19
32bit 운영체제 일때

struct A
{
     BYTE  a;  // 1Byte
     WORD  b;  // 2Byte
     DWORD c;  // 4Byte
};
A test;


1+2+4 = 7 총 7Byte라고 생각하는데
실제  sizeof(test) 해보면 12Byte로 나옵니다.
이유는 운영체제가 32bit일때 4Byte에 최적화 되어 있어서
structure가 4Byte가 아니면 4Byte로 맞추는 경향이 있습니다.
이런걸 padding이라고 하는데
이럴대는 padding을 1Byte로 맞추면 됩니다.
방법은
#pragma pack(push, 1)
struct A
{
     BYTE  a;    // 1Byte
     WORD  b;    // 2Byte
     DWORD c;    // 4Byte
};
#pragram pack(pop)


이렇게 하고 다시 sizeof로 확인해 보면은 제대로 7Byte로 나타납니다.

ps. #pragma pack 컴파일러 명령은 구조체 단위로 멤버 정렬 방식을 설정할 때 사용합니다.
posted by 뚱2