Skip to content

#pragma pack 정리

abiles edited this page Nov 23, 2014 · 2 revisions

pragma pack에 대해서 알아보자

의미

  • pack지시자는 코드 상에서 pack지시자 이후에 위치한 구조체의 정렬 방식을 지정한다

  • 프로젝트 설정에서도 가능하지만 pack 지시자는 코드 중간에서도 원하는 구조체의 정렬방식을 변경할 수 있다는 점에서 다르다

//다음과 같이 사용할 수도 있다
#pragma pack(2)
struct st1
{
   short s1;
   int   i1;
};

#pragma pack(4)
struct st2
{
   short s2;
   int   i2;
};

//이렇게 선언하면 st1구조체는 2바이트 단위로 정렬되므로 6바이트가 되고
//st2구조체는 4바이트 단위로 정렬되므로 8바이트가 된다

pop과 push

  • pragma pack은 pop, push와 함께 사용될 수 있다.

  • pragma pack(push, n)이나 #pragma pack(pop)이 사용법이다

//#pragma pack(push, n)의 경우 
//현재 정렬 값을 push하고 n짜리 정렬값으로 바꾼다. 
//즉 push는 현재 값을 저장하는 키워드이고 n은 새 정렬값을 부여하는 키워드인 것이다

#pragma pack(2)
struct st1 
{ 
   short s; 
   int i; 
};                   // 2바이트 정렬

#pragma pack(push,4)               // 푸시하면서 4바이트 정렬로 바꿈

struct st2 {
   short s; 
   int i; 
};                   // 4바이트 정렬

//#pragma pack(pop)의 경우 
//가장 최근에 저장한 정렬 값을 불러온다. 
//바로 위에 있는 push예제와 연결해서 살펴 보면
#pragma pack(pop)                    // 원래 정렬값 복원
struct st3 
{
  short s; 
  int i; 
};                   // 2바이트 정렬

정리

  • pack 지시자는 구조체의 바이트 정렬 값을 지정해주기 위해 사용한다

  • pack과 함께 사용되는 키워드로 push와 pop이 있다

  • push는 현재 값을 저장하면서 정렬 값을 바꾸고 싶을 때 사용한다

  • pop은 push에 의해 저장된 값을 다시 불러오고 싶을 때 사용한다

Clone this wiki locally