구조체 패딩은 메모리 낭비가 아니라 — 하드웨어 요구사항이다

발행: (2026년 1월 1일 오전 02:02 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

구조체의 크기를 직접 계산해 보았는데 sizeof가 더 큰 값을 반환한다면? 당신이 미친 것이 아니라, 컴파일러가 잘못된 것이 아닙니다. 이 가이드에서는 구조체 패딩을 해석하고, 왜 발생하는지, CPU가 왜 이를 좋아하는지, 그리고 임베디드 시스템에서 이를 최적화하는 방법을 설명합니다.

Table of Contents

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를 보고합니다.
그 이유는 컴파일러가 메모리에 구조체를 배치하는 방식 때문입니다.

Back to Blog

관련 글

더 보기 »