고흐의 연구실/C언어와 C++
[C언어] 구조체 정렬 크기 조절, #pragma 란??
전고흐
2020. 8. 9. 20:43
728x90
구조체 크기?
구조체는 기본적으로, 가장 사이즈가 큰 요소에 맞춰지게 된다.
예를들면,
struct Ex {
int a;
char b;
long long c;
};
라고 한다면, a의 크기는 4, b의 크기는 1, longlong의 크기는 8이면, 이 구조체 각 요소는 크기가 8로 맞춰진다.
그렇다면 이 구조체의 총 크기는, 8 * 3 =24 이다.
하지만, 이 구조치를 #pragma를 사용하여 원하는 크기로 잘라서 조절 할 수 있다.
아래 내용 참조.
구조체 정렬 크기 조절하기
ㅇVisual Studio, GCC 4.0 이상
#pragma pack(push, 정렬크기)
#pragma pack(pop)
ㅇGCC 4.0 미만
__attribute__((aligned(정렬크기), packed))
ㅇExample
#include <stdio.h>
#pragma pack(push, 1) // 1바이트 크기로 정렬
struct PacketHeader {
char flags; // 1바이트
int seq; // 4바이트
};
#pragma pack(pop) // 정렬 설정을 이전 상태(기본값)로 되돌림
int main()
{
struct PacketHeader header;
printf("%d\n", sizeof(header.flags)); // 1: char는 1바이트
printf("%d\n", sizeof(header.seq)); // 4: int는 4바이트
printf("%d\n", sizeof(header)); // 5: 1바이트 단위로 정렬했으므로 // 구조체 전체 크기는 5바이트
return 0;
}
728x90