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
'고흐의 연구실 > C언어와 C++' 카테고리의 다른 글
[C언어] size_t 자료형이란? (0) | 2020.08.10 |
---|---|
[C언어] 구조체 메모리 사용 함수 memset(), memcpy() (1) | 2020.08.10 |
[C언어] 구조체 기초 정리 (0) | 2020.08.09 |
[C언어] math.h 함수 sqrt(), pow(), abs(), fabs(), fabsf() (0) | 2020.08.09 |
[C언어] 문자열 함수 정리 (0) | 2020.08.09 |