@bitOffsetOf

@bitOffsetOf

구조체(struct) 필드가 자신을 감싸는 구조체의 시작점에서 몇 번째 비트에 놓여 있는지 알려 주는 내장 함수예요. 바이트 단위로 위치를 알려 주는 @offsetOf보다 더 촘촘한 단위를 다루고 싶을 때 써요.

출처: Zig Documentation

본문

@bitOffsetOf는 필드의 비트 단위 오프셋을 돌려줘요.

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

필드가 들어 있는 구조체를 기준으로, 그 필드가 시작하는 위치가 구조체 맨 앞에서 몇 비트 떨어져 있는지를 반환해요.

일반(비 packed) 구조체에서는 이 값이 항상 8로 나누어떨어져요. 즉 비트 오프셋이 곧 바이트 단위로도 깔끔하게 정리된다는 뜻이죠. 반면 packed 구조체에서는 바이트 정렬이 안 되는 필드들이 같은 바이트 오프셋을 공유하지만, 각각 서로 다른 비트 오프셋을 가질 수 있어요. 그래서 packed 레이아웃에서는 필드의 정확한 위치를 바이트가 아니라 비트 단위로 따져야 해요.

같이 보기

  • @offsetOf — 필드의 바이트 단위 오프셋을 알려 주는 내장 함수

더 알아보기

  • @offsetOf — 같은 개념을 바이트 단위로 다루는 내장 함수
  • packed structs — 필드가 비트 단위로 나란히 붙는, 비트 오프셋이 특히 의미 있는 구조체
  • Alignment — 구조체 필드가 메모리에서 정렬되는 방식