더북(TheBook)

템플릿으로 만든 ByteSwap() 함수를 호출하면 ByteSwapper 인스턴스를 만드는데, ByteSwapper 템플릿은 인수의 크기에 따라 결정된다. 이 인스턴스는 내부적으로 TypeAliaser를 써서 적당한 ByteSwap() 함수를 호출한다. 컴파일러가 최적화를 수행하고 나면 중간 호출이 모두 정리되고 소수의 기계어 코드만 남는데, 남은 코드는 레지스터 한 개만 가지고도 바이트 순서를 뒤집을 수 있을 정도로 최적화된 코드가 된다.

Note ≣

플랫폼의 엔디언이 스트림과 다를 때, 바이트 스와핑을 해야 하는 경우가 있고 그렇지 않은 경우가 있다. 일례로 MBCS나 UTF-16 이상 유니코드의 경우, 문자열의 각 문자마다 스와핑해야 하지만 단일 바이트 단위 문자열이면 그럴 필요가 없다. 문자열 자체는 여러 바이트가 모여 이루어지지만 각각의 문자는 단일 바이트이기 때문이다. 원시 자료형에 한하여 바이트 스와핑을 해야 하며 스와핑할 때는 항상 해당 자료형에 정확히 일치하는 크기로 해야 한다.6

 


 

6  역주 uint16 네 개를 uint64 하나로 묶어 뒤집으면 빠를 것 같지만 틀린 결과가 나온다. uint16 단위로 하나씩 하나씩 네 번을 해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.