빅 엔디안(big endian)과 리틀 엔디안(little endian)

바이트 오더(Byte Order)

바이트 오더는 데이터를 메모리에 배열하는 순서에 대한 방법을 뜻한다. 바이트 오더는 여러 종류가 있으며 그중 빅 엔디안과 리틀 엔디안이 가장 많이 쓰인다. 개인적으로는 둘 외에 본 적이 없다.

빅 엔디안 (Big Endian)

사람이 일반적으로 읽는것과 같이 큰 값부터 왼쪽에서 순차적으로 메모리에 할당한다. 이때 두개씩 묶이는 이유는 최소 저장 단위가 8bit(1byte)이기 때문이다. (0x12345678은 32bit)

리틀 엔디안 (Little Endian)

빅 엔디안과 반대로 작은 값부터 순차적으로 메모리에 할당한다.

빅 엔디안 vs 리틀 엔디안

과거에는 빅 엔디안과 리틀 엔디안의 성능 차이가 있었다고 하나 최근에서는 거의 없는 것으로 알고 있다. 그래도 빅 엔디안과 리틀 엔디안의 구분은 필요하다. 빅 엔디안으로 만들어진 프로그램을 내가 리틀 엔디안으로 읽으면 틀린 결과가 출력되기 때문이다. 만약 모두가 빅 엔디안을 사용하거나 리틀 엔디안을 사용하면 이런 일이 없다. 그래서 반드시 표준이 필요한 네트워크 쪽은 빅 엔디안을 사용한다. 프로세서들은 혼용하여 사용하는데, 가장 많이 쓰는 x86은 리틀 엔디안을 사용한다.

임베디드에서의 바이트 오더

임베디드 아키텍쳐들은 엔디안을 선택할 수 있는 경우가 많다. 선택이 가능하다면 흔히 빌드 환경에서 설정할 수 있다. 이때 주의해야 할 것이, 예를 들어 빌드시 엔디안을 선택할 수 있는데 막상 타깃 보드가 특정 엔디안으로 고정되어 있는 경우가 있다.(사실 이것 때문에 이 글을 썼다) 이 경우 내가 선택한 엔디안과 보드의 엔디안이 불일치하면 빌드오류가 발생한다. 만약 엔디안이 불일치했는데 오류를 출력하지 않는 경우도 있다면 디버깅에 오랜 시간이 걸릴 수 있다. 주의가 필요하다.

Leave a Comment