@offsetOf

@offsetOf

구조체(struct)의 필드 하나를 짚었을 때, 그 필드가 구조체의 시작 지점에서 몇 바이트 떨어져 있는지 알고 싶을 때가 있어요. @offsetOf는 바로 그 바이트 오프셋(byte offset)을 알려주는 내장 함수예요. 메모리 레이아웃을 다루거나 저수준 작업을 할 때 자주 쓰는 기능이죠.

출처: Zig Documentation

본문

@offsetOf의 시그니처는 이렇게 생겼어요.

@offsetOf(comptime T: type, comptime field_name: []const u8) comptime_int

첫 인자 T는 대상 타입, 두 번째 인자 field_name은 그 타입 안에서 찾을 필드의 이름(문자열)이에요. 두 인자 모두 comptime이어야 해요. 그래서 이 함수는 항상 컴파일 타임에 평가되고, 결과로는 그 필드가 속한 구조체의 시작 지점(offset 0)에서 몇 바이트 떨어져 있는지를 나타내는 comptime_int를 돌려줘요.

즉, "이 구조체에서 이 필드는 메모리상 어디쯤에 자리 잡고 있나?"라는 질문에 답해 주는 함수예요.

관련해서 더 자세히 볼 만한 것은 아래 링크예요.

더 알아보기

  • @bitOffsetOf — 바이트 단위가 아니라 비트 단위로 필드의 오프셋을 알고 싶을 때 쓰는 함수예요