C 언어 · 메모리 배치

구조체와 공용체 바이트 배치 비교

구조체는 멤버를 순서대로 나란히 배치하고 공용체는 같은 시작 주소를 공유한다는 차이를 바이트 칸과 접근 연산자 기준으로 비교한다.

01

멤버 크기 확인

각 타입의 크기와 정렬 단위를 먼저 확인한다.

sizeof
02

구조체 배치

선언 순서대로 주소를 배정하고 필요한 위치에 패딩을 넣는다.

ordered layout
03

공용체 배치

모든 멤버가 같은 시작 주소를 사용하고 전체 크기는 가장 큰 멤버에 맞춘다.

shared storage
04

접근 방식 선택

객체 자체는 점 연산자, 포인터는 화살표 연산자로 멤버에 접근한다.

member access
동시 보관
구조체가 적합 여러 멤버 값을 동시에 의미 있게 유지해야 한다.
record
하나만 활성
공용체가 적합 여러 표현 중 한 가지 값만 현재 상태로 보관한다.
variant
패딩 절감
선언 순서가 중요 큰 정렬 단위 멤버를 앞에 배치하면 크기를 줄일 수 있는 경우가 있다.
alignment

구조체와 공용체 바이트 실수 방지

마지막 기록 공용체는 마지막으로 쓴 멤버 해석이 가장 중요하다.
포인터 접근 포인터 변수에는 `->`, 객체 변수에는 `.`를 사용한다.
ABI 의존 패딩과 정렬 결과는 플랫폼 규칙에 따라 달라질 수 있다.