티스토리 뷰

dev

빅 엔디안 vs 리틀 엔디안

IT's me 2019. 3. 23. 22:53

IT 일을 하다보면 빅엔디안 vs 리틀엔디안 심심치 않게 들을 수 있어서 그리고 저도 이기종 통신간에 가끔 접하는 문제라서 오늘은 블로그에 정리를 해봅니다. 먼저 엔디안에 대해서 알아봅시다.

 

엔디안의 뜻, 빅 엔디안 vs 리틀 엔디안 차이

 

먼저 엔디안의 뜻과 빅엔디안과 리틀엔디안의 차이에 대해서 알아보겠습니다.


1. 엔디안(Endian)의 정의?

데이터를 저장하기 위해서 메모리에 바이트를 저장하게 되는데 이 바이트를 저장하는 배열 방법, 즉 배열 순서를 뜻합니다. 그러니까 바이트 순서라고 할 수 있습니다.

 

엔디언은 조너선 스위프트 걸리버 여행기 소설에 나오는 소인국 릴리퍼트 이야기에서 달걀을 깰 때 뭉툭한 쪽을 먼저 깨는 사람들(빅 엔디언)과 뾰족한 쪽(little-end)을 먼저 깨는 사람들(리틀 엔디언) 사이에 격론이 벌어진 데서 따온 것입니다.

빅 엔디안과 리틀 엔디안

빅 엔디언과 리틀 엔디언 중 어느 것을 쓰느냐 하는 문제는 상황에 따라서 임의적이기 때문에 계속 논란의 대상이 되었습니다.​


2. 빅 엔디안과 리틀 엔디안, 그리고 차이점?

이쯤이면 예상했겠지만 정방향으로 저장하면 ( → ) 빅 엔디안 ( Big Endian ), 역 방향으로 저장하면 ( ← ) 리틀 엔디안 ( Little Endian ) 이 되겠습니다. 특징이라면 빅 엔디안은 디버깅이 쉬운 장점이 있고, 리틀 엔디안은 처리 속도가 빠릅니다.

 

두 방법 다 장단점이 있기 때문에 어느 한쪽이 압도적으로 좋거나 나쁘지는 않다고 알려졌습니다.

 

그러나 x86 아키텍처가 리틀 엔디언을 쓰기 때문에 x86 아키텍처를 사용하는 대부분 우리 주변의 PC들은 리틀 엔디언을 쓰며 이를 ‘인텔 포맷’이라 합니다. 사실 상 우리 주변에 보는 컴퓨터들은 리틀 엔디언이라 생각하면 되는겁니다.

 

엔디안 뜻, 빅 엔디안 vs 리틀 엔디안 차이

 

거꾸로 네트워크에서는 주소를 빅 엔디언을 쓰는데 역사적으로 라우팅이 전화를 거는 식으로 접두 부호로 이루어졌기 때문인데요. 이 영향으로 많은 프로토콜과 몇몇 파일 포맷이 빅 엔디언을 사용하고 있습니다. 모토로라 프로세서들은 일반적으로 빅 엔디언을 사용하며, ARM 프로세서들은 성능 향상을 위해 빅 엔디언과 리틀 엔디언을 선택할 수 있도록 되어 있다고 합니다.

 

종류 0x1234의 표현 0x12345678의 표현
빅 엔디언 12 34 12 34 56 78
리틀 엔디언 34 12 78 56 34 12
미들 엔디언
- 34 12 78 56
또는
56 78 12 34

해당 표는 실질적으로 '0x1234', '0x12345678' 바이트를 표현하는 방식을 나타냅니다. 빅엔디언은 우리가 보기 좋게 앞에서 뒤로, 리틀 엔디언은 역순으로, 미들 엔디언은 중간에서 양쪽으로 퍼지는 형태가 됩니다.  표로 보시니깐 이해가 쉽죠?


3. 엔디안에 대해서 요점 정리 및 알아두면 좋은 것.

 1) 빅엔디안과 리틀 엔디안을 섞어서 사용하는 미들 엔디안(Middel Endian)도 있습니다.

 2) 인텔 계열의 CPU는 리틀 엔디안을 사용하므로 주변에서 흔히 볼수 있는 방식은 리틀엔디안이라 생각됩니다.

 3) 이기종 간의 통신을 할 때 엔디안 차이에 따라 엉뚱한 결과가 발생할 수 있으니 염두해두어야 합니다. ( 네트웤은 빅 엔디안이 표준 : NBO : Network Byte Order )

 

4) 일부 아키텍처는 빅 엔디언과 리틀 엔디언 중 하나를 선택할 수 있도록 설계되어 있고, 이를 바이 엔디언(Bi-endian)이라 부릅니다.

 

5) 바이트가 아닌 비트 단위의 저장 순서를 어디서부터 채울것이냐하는 문제가 있는데, 최상위 비트(MST : Most Significant Bit)부터 채우는 것을 최상위 비트 우선, 최하위 비트(LSB : Least Significant Bit)부터 채우는 것을 최하위 비트 우선이라고 합니다.


4. 참고자료. 

https://ko.wikipedia.org/wiki/%EC%97%94%EB%94%94%EC%96%B8

 

엔디언 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 엔디언(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라 한다. 엔디언은 보통 큰 단위가 앞에 나오는 빅 엔디언(Big-endian)과 작은 단위가 앞에 나오는 리틀 엔디언(Little-endian)으로 나눌 수 있으며, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들 엔디언(Middle

ko.wikipedia.org

이외에 몇가지 블로그나 자료들.


오늘은 엔디안 뜻, 빅 엔디안 vs 리틀 엔디안 차이 에 대해서 알아봤습니다. 알아두시면 언젠가 요긴하게 써먹을대가 있을 것 같습니다. ( 아... 아는 척 할때...? ;; )


댓글
최근에 올라온 글
최근에 달린 댓글