WIPIVERSE

엔디언

엔디언(endianness)은 컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 특히 바이트를 배열하는 방법을 바이트 순서(byte order)라고 한다. 컴퓨터 시스템에서 다중 바이트 데이터(예: 4바이트 정수)를 메모리에 저장하거나 네트워크로 전송할 때 바이트가 어떤 순서로 배치되는지를 결정하는 규칙이다.

분류

엔디언은 크게 두 가지 방식으로 나뉜다.

  • 빅 엔디언(big-endian): 큰 단위의 바이트(상위 바이트)가 앞쪽(낮은 메모리 주소)에 오는 방식이다. 사람이 숫자를 읽고 쓰는 방식과 같아 디버깅 과정에서 메모리 값을 직관적으로 확인하기 쉽다. 네트워크 프로토콜(TCP/IP)과 모토로라 프로세서 계열에서 주로 사용된다.

  • 리틀 엔디언(little-endian): 작은 단위의 바이트(하위 바이트)가 앞쪽에 오는 방식이다. 메모리에 저장된 값의 하위 바이트만 사용할 때 별도의 주소 계산이 필요하지 않다는 장점이 있다. x86 아키텍처(인텔, AMD 계열)가 이 방식을 사용하며, 오늘날 대부분의 데스크톱 컴퓨터에서 채택하고 있어 '인텔 포맷'이라고도 불린다.

두 방식 외에 어느 한 쪽으로 단정하기 어려운 경우를 미들 엔디언(middle-endian)이라 한다. 예를 들어 32비트 정수를 2바이트 단위로는 빅 엔디언, 그 안에서 1바이트 단위로는 리틀 엔디언으로 저장하는 방식이다. PDP-11 아키텍처에서 사용된 것을 'PDP 엔디언'이라고도 부른다.

또한 시스템이 빅 엔디언과 리틀 엔디언 중 하나를 선택할 수 있도록 설계된 것을 바이 엔디언(bi-endian)이라 한다. ARM, PowerPC, MIPS, IA-64 등의 아키텍처가 이에 해당하며, 대부분 소프트웨어적으로 바이트 순서를 변경할 수 있다.

어원

엔디언이라는 용어는 조너선 스위프트의 소설 《걸리버 여행기》에 등장하는 소인국 릴리퍼트 이야기에서 유래했다. 달걀을 깔 때 뭉툭한 끝(big-end)을 먼저 깨는 '빅 엔디언'과 뾰족한 끝(little-end)을 먼저 깨는 '리틀 엔디언' 사이에 격론이 벌어지는 내용을 인용한 것이다. 컴퓨터 공학에서 이 용어를 처음 사용한 것은 대니 코언(Danny Cohen)이 1980년에 발표한 논문 《On Holy Wars and a Plea for Peace》로, 당시 엔디언 논쟁을 잠재우기 위한 목적이었다.

비트 순서

바이트 순서와 유사하게 비트 단위의 순서를 따질 수도 있으나, 메모리 접근이 일반적으로 바이트 단위로 이루어지므로 비트 순서는 상대적으로 덜 중요하게 다루어진다. 다만 저수준 프로토콜이나 파일 포맷(PNG, GIF 등)에서는 비트를 최상위 비트(MSB)부터 채울지 최하위 비트(LSB)부터 채울지가 결정된다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기