비정렬 타입캐스트

비정렬 타입캐스트 (Unaligned typecasts)

특수한 타입캐스트로, 변수나 식의 비정렬 타입캐스트(Unaligned typecast)가 있어요. 이건 실제 타입캐스트가 아니라, 식이 정렬되지 않았을(즉 정렬된 메모리 주소에 있지 않을) 수 있다는 힌트를 컴파일러에 주는 것이에요. 일부 프로세서는 정렬되지 않은 데이터 구조에 직접 접근하는 걸 허용하지 않아서, 데이터를 바이트 단위로 접근해야 해요.

출처: Free Pascal Reference - Unaligned typecasts

본문

식에 unaligned 키워드로 타입캐스트를 하면 컴파일러에게 데이터를 바이트 단위로 접근하라고 신호를 보내요.

컴파일러는 packed 데이터 구조의 모든 필드/요소 접근이 정렬되지 않은 것으로 간주한다는 점을 기억하세요.

예시를 볼게요.

program me;

Var
  A : packed Array[1..20] of Byte;
  I : LongInt;

begin
  For I:=1 to 20 do
    A[I]:=I;
  I:=PInteger(Unaligned(@A[13]))^;
end.

더 알아보기

  • 일반적인 타입캐스트 규칙은 값 타입캐스트와 변수 타입캐스트 섹션에서 다뤄요.
  • packed 데이터 구조의 메모리 배치가 이 동작의 근거가 돼요.