extern struct와 ABI 배치
C 구조체의 메모리 배치에 맞춥니다.
extern struct와 ABI 배치은(는) CoddyKit의 무료 Zig Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Zig Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Zig Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
C와 통신하기
Zig가 C 코드를 호출할 때는 양쪽이 메모리 레이아웃에 동의해야 합니다. 이 공유 계약이 바로 ABI입니다.
일반 구조체는 보장되지 않습니다
일반 struct에서는 Zig가 필드 순서와 패딩을 자유롭게 정하므로, 메모리 배치가 C 라이브러리가 기대하는 것과 일치하지 않을 수 있습니다.
extern struct 사용하기
타입을 extern struct로 표시하면 Zig가 C ABI를 사용해 필드를 배치하므로, C 구조체와 필드 단위로 일치합니다.
const Point = extern struct {
x: i32,
y: i32,
};필드 순서 유지하기
extern struct는 C와 마찬가지로 선언 순서를 유지하므로, 첫 번째 필드는 메모리에서도 항상 먼저 옵니다.
C와 같은 패딩
packed struct와 달리 extern struct는 C 컴파일러와 정확히 같은 방식으로 정렬을 위한 패딩을 추가합니다.
packed와 extern 비교
비트 단위로 정확한 배치가 필요하면 packed를 사용하고, C의 바이트 배치와 맞추려면 extern을 사용합니다. 두 기능은 서로 다른 배치 문제를 해결합니다.
C에 구조체 전달하기
extern struct는 C 함수에 그대로 전달할 수 있습니다. 함수가 컴파일될 때 사용한 헤더와 배치가 일치하기 때문입니다.
extern fn use_point(p: Point) void;크기 확인하기
@sizeOf를 사용해 extern struct가 C와 일치하는지 확인할 수 있습니다. 이 기능은 정렬을 위한 패딩을 포함한 전체 바이트 수를 알려 줍니다.
const n = @sizeOf(Point); // 8필드 오프셋 확인하기
@offsetOf를 사용하면 각 필드가 정확히 어디에서 시작하는지 확인할 수 있어 구조체의 배치가 C와 맞는지 검증하기 좋습니다.
const off = @offsetOf(Point, "y"); // 4C와 호환되는 타입만 사용하기
extern struct의 필드는 C와 호환되는 타입이어야 하므로, slice처럼 Zig에만 있는 형태는 그 안에 사용할 수 없습니다.
C로 연결되는 다리
extern struct와 C ABI를 함께 사용하면 Zig와 C가 배치를 복사하거나 추측하지 않고도 데이터를 안전하게 공유할 수 있습니다. 🔗
빠른 확인
extern struct가 무엇과 일치하도록 설계되었는지 떠올려 보세요.
복습
extern struct가 C ABI와 일치한다는 것을 배웠습니다. 즉, 필드 순서를 유지하고 C 방식의 패딩을 사용하며 C에 전달할 수 있고, @sizeOf와 @offsetOf로 검증할 수 있습니다. 🎉
자주 묻는 질문
“extern struct와 ABI 배치” 강의는 무료인가요?
네 — “extern struct와 ABI 배치” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Zig Academy 강의 전체를 잠금 해제할 수 있습니다. Zig Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“extern struct와 ABI 배치”에서 뭘 배우나요?
C 구조체의 메모리 배치에 맞춥니다. 브라우저에서 직접 실행하는 실습 코드로 Zig Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Zig Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Zig Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“extern struct와 ABI 배치” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Zig Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Zig Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 정확한 배치를 위한 packed struct
- u3 같은 임의 너비 정수
- 비트 필드와 플래그
- extern struct와 ABI 배치