Search Results for 'C++/#pragma pack'

1 POSTS

  1. 2012.10.16 #pragma pack

#pragma pack

Posted 2012. 10. 16. 14:14

기본적인 윈도우 환경에서 데이터정렬은 4바이트를 기준으로 이루어 진다.

cpu가 32바이트인 컴퓨터에서 4바이트씩 처리하는게 가장 빠르기 때문이다.

#pragma pack 은 이 구조체정렬을 몇 바이트씩 pack을 할지 정할수 있는것이다.


예를 들어.

struct AAA

{

int a;

short b;

};

AAA라는 구조체가 있다.

멤버변수로 int형 a와 short형 b가 있다. 두 변수를 합하면 6바이트가 된다.

하지만 sizeof(AAA)를 하면 8바이트가 나오게 된다.

왜냐면 구조체 정렬이 4바이트로 되어 있기 때문이다.

short는 2바이트면 되지만 메모리 구조상 4바이트를 먼저 할당할 다음 2바이트를 사용하게 된다.

그러면 남은 2바이트는 사용하지않는 공간이 되어 버린다.


AAA bbb;

sizeof(bbb.a)  sizeof(bbb.b) 하면 제대로 4바이트 2바이트가나오지만 묶으면 그렇지 않다


그렇게 데이터 교환중에 의도치 않은 현상이 발생 할 수도 있다.

묶었을때도 1바이트씩 처리되게 바꿔 주면 됨.

#pragma pack(1)        // 묶어주고

struct AAA

{

int a;

short b;

};

#pragma pack()        // 원상태로


사용 후 복구 시켜 줘야 한다.

앞서 말했다 싶이 4바이트씩 처리하는게 가장 빠르다고 했다.

복구 시키지않으면 시스템이 저하될수도 있다.