`@addrSpaceCast` — 포인터를 주소 공간 사이에서 변환하기

@addrSpaceCast — 포인터를 주소 공간 사이에서 변환하기

포인터를 한 주소 공간에서 다른 주소 공간으로 옮기고 싶을 때 쓰는 내장 함수예요. 새 주소 공간은 결과 타입에서 추론되고, 변환이 항상 단순하지만은 않아요.

출처: Zig Documentation

본문

@addrSpaceCast는 포인터를 한 주소 공간에서 다른 주소 공간으로 변환해요.

@addrSpaceCast(ptr: anytype) anytype

새 주소 공간은 어디서 정해질까요? 바로 결과 타입에서 추론돼요. 즉 어떤 주소 공간으로 변환할지는 우리가 이 값을 받아 쓰는 방식이 결정해 주는 거죠. 별도로 "여기로 보내줘"라고 지정할 필요가 없다는 뜻이에요.

그런데 여기서 짚고 넘어갈 게 있어요. 이 변환이 항상 단순한 건 아니란 점이에요. 현재 타깃과 주소 공간에 따라 이 캐스트는 세 가지 중 하나가 될 수 있어요.

  • 아무 일도 하지 않는 no-op이거나,
  • 복잡한 연산이거나,
  • 아예 허용되지 않는(illegal) 연산일 수 있어요.

만약 변환이 합법적(legal)이라면, 결과 포인터는 원래 피연산자 포인터와 같은 메모리 위치를 가리켜요. 값이 옮겨지는 게 아니라 여전히 같은 지점을 바라본다는 뜻이에요. 그리고 같은 주소 공간 사이의 포인터 변환은 항상 유효해요.

정리하면, @addrSpaceCast는 "어느 주소 공간에서, 어느 주소 공간으로 가는지"를 우리가 다루는 타입이 결정하게 두는 변환이라고 볼 수 있어요.

더 알아보기 (Learn more)