본문 바로가기

프로그래밍 활용(TIP)

구조체 맴버맞춤

struct TEST
{
int iNum;
char ch;
};

구조체를 선언할적에 위와 같이 선언했다면 우리 생각엔 "4Byte(int) + 1Byte(char) = 5Byte" 라고 생각하기 쉽지만,
실질적으로 8Byte가 할당된다.

그 이유는 CPU 효율을 위해 4Byte씩 미리 잡아놓고 할당을 하기 때문이라고...

근데 주의할껀 char형 변수 3개를 선언하면 12byte가 되는게 아니라 4바이트가 할당된다.
미리 4바이트를 잡아두고 1바이트인 캐릭터형 3개는 4바이트를 넘지 않기때문에, 별도로 4바이트를 할당할 필요가 없기때문이다.

이러한 현상을 해결하기 위해서는, 2가지 방법이 있는데, 비쥬얼 스튜디오의 [프로젝트] - [속성] - [구성속성] - [C/C++] -[코드생성] 안에 구조체 멤버 맞춤 항목의 값을 바꿔주는 방법이 있고,

두번쨰로는 pragma 명령어를 이용한 방법이다. 자세한것은 아래 참고..

#pragma pack(1) //바이트 단위
struct TEST
{
int iNum;
char ch;
};
#pragma pack()