빅엔디언 리틀엔디언

개요

  • 컴퓨터 메모리와 같은 1차원의 공간에 여러개의 원소를 배열하는 방법이다. 쉽게 말하여 한 줄의 데이터를 왼쪽부터 쓰고 읽느냐 오른쪽부터 쓰고 읽느냐를 말한다. 컴퓨터공학의 관점에서는 특히 바이트를 배열하는 방법을 의마하며 바이트 순서(Byte order)라 한다.

유래

  • 조너선 스위프트의 소설 <걸리버 여행기>에서 달걀을 깰 때 뭉툭한 끝(big-end)을 먼저 깨는 사람들(big-endian)과 뾰족한 끝(little-end)을 먼저 깨는 사람들(little-endian) 사이에 토론에서 유래 되었다.
  • 컴퓨터공학에서 의 엔디언은 대니 코언(Danny Cohen)이 이런 플레임을 잠재우기 위해 1980년에 쓴 On Holy Wars and a Plea for Peace라는 글에서 유래 되었다.

설명

  • 빅엔디언은 쉽게 설명하여 사람이 숫자를 쓰는 방법대로 상위바이트부터 하위주소에 기록하는 것이다. 101010 이라는 바이트가 존재한다면 이는 메모리에 101010으로 기록된다.
  • 리틀엔디언은 쉽게 설명하여 사람이 숫자를 쓰는 방법의 반대로 하위바이트부터 하위주소에 기록하는 것이다. 101010 이라는 바이트가 존재한다면 이는 메모리에 010101로 기록된다.
  • PDP-11 등 몇몇 아키텍쳐는 2바이트 단위와 1바이트 단위로 서로 다른 순서를 사용하는 미들엔디언이라는 컨셉도 존재한다.
  • 리틀엔디언은 x86 아키텍쳐를 사용하는 인텔이 대표적으로 사용하여서 “인텔 포맷”이라고 불리기도 한다.
  • 하지만 네트워크는 특성상 네트워크 주소를 빅엔디언으로 사용한다.라우팅이 접두 부호로 이루어져 있기 때문이다.
  • 빅엔디언은 위의 언급처럼 사람이 읽고 쓰는 방식과 동일하기 때문에 개발자가 소프트웨어 디버깅을 할 때 편리한 점이 있다.
  • 반대로 리틀 엔디언은 사람이 읽는데는 불편함이 있지만 메모리에 저장된 값의 하위 바이트만 사용할때 별도로 계산이 필요없다는 장점을 가지고 있다. 예를 들어 32비트 숫자가 리틀엔디언으로 2A 00 00 00같이 존재할때, 하위 16비트나 8비트 값을 얻을때는 앞의 한두바이트만 분리하면 바로 얻을 수 있다. 하지만 이를 빅엔디언 방식으로 표현했다면 주소에 2~3바이트를 더하여 구하여야 한다.

note

  • 가산기가 덧셈을 할때 LSB(Least Significant Bit, 최하위 비트)에서 시작 하여 carry와 sum을 구하는 계산을 하는데 첫 바이트가 LSB인 리틀엔디언은 가산기가 조금더 단순하게 설계될 수 있다. 하지만 빅엔디언은 마지막 바이트부터 첫 바이트로 역방향으로 진행해야 하는 설계를 가져야한다. 그러나 최신의 프로세서들은 여러개의 바이트를 동시에 읽어들여 동시에 덧셈을 수행하므로 두 엔디언에서 사실상 차이가 없다고 한다.