구조체 패딩은 메모리 낭비가 아니라 — 하드웨어 요구사항이다
발행: (2026년 1월 1일 오전 02:02 GMT+9)
3 min read
원문: Dev.to
Source: Dev.to
구조체의 크기를 직접 계산해 보았는데 sizeof가 더 큰 값을 반환한다면? 당신이 미친 것이 아니라, 컴파일러가 잘못된 것이 아닙니다. 이 가이드에서는 구조체 패딩을 해석하고, 왜 발생하는지, CPU가 왜 이를 좋아하는지, 그리고 임베디드 시스템에서 이를 최적화하는 방법을 설명합니다.
Table of Contents
- What Is a Structure?
- How Structures Are Stored in Memory
- The Padding Myth
- Why Structure Padding Is Necessary
- Packed Structures: When to Use Them (and When Not To)
- The Trade‑Off: Memory vs Performance
What Is a Structure
- C에서 **구조체(structure)**는 프로그래머가 서로 다른 타입의 값을 하나의 이름 아래에 묶을 수 있게 해 주는 사용자 정의 데이터 타입입니다.
- 구조체 안의 항목을 멤버(member) 라고 하며, 어떤 유효한 데이터 타입이든 될 수 있습니다.
- 구조체는
struct키워드 뒤에 구조체 이름과 중괄호{}안에 멤버 목록을 적어 정의합니다.
struct Point {
int x;
int y;
};
How Structures Are Stored in Memory
다음 구조체를 살펴보세요:
#include <stdio.h>
struct example {
char a; // 1 byte
// 여기서 3 byte의 패딩이 삽입됨
int b; // 4 bytes
char c; // 1 byte
// 여기서 3 byte의 패딩이 삽입됨
};
int main(void) {
printf("size of struct = %zu bytes\n", sizeof(struct example));
return 0;
}
프로그램을 실행하면 다음과 같이 출력됩니다:
size of struct = 12 bytes
멤버들의 실제 크기는 6 byte에 불과하지만, 컴파일러는 12 byte를 보고합니다.
그 이유는 컴파일러가 메모리에 구조체를 배치하는 방식 때문입니다.