-
Notifications
You must be signed in to change notification settings - Fork 5
#pragma pack 정리
abiles edited this page Nov 23, 2014
·
2 revisions
-
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바이트가 된다
-
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에 의해 저장된 값을 다시 불러오고 싶을 때 사용한다