바이트 저장 순서 ( byte order )

컴퓨터는 데이터를 메모리에 저장할 때, 바이트 ( byte ) 단위로 나눠서 저장한다.

하지만 컴퓨터가 저장하는 데이터는 32 비트 ( 4바이트 ) 또는 64비트 ( 8바이트 )로 구성된다.

따라서 이렇게 연속되는 바이트를 순서대로 저장해야 하는데, 이를 바이트 저장 순서 ( byte order )라고 한다.

 

이때 바이트가 저장되는 순서에 따라 아래와 같이 두 가지 방식으로 나눌 수 있다.

1. 빅 엔디안 ( big endian )

2. 리틀 엔디안 ( little endian )


빅 엔디안 ( big endian )

빅 엔디안 방식은 낮은 주소에 데이터의 높은 바이트 ( MSB, Most Significant Bit )부터 저장하는 방식이다.

이 방식은 평소 우리가 숫자를 사용하는 선형 방식과 같은 방식이다.

따라서 메모리에 저장된 순서 그대로 읽을 수 있고, 이해하기가 쉽다는 장점을 가지고 있다.

SPARC를 포함한 대부분의 RISC CPU 계열에서는 이 방식으로 데이터를 저장한다.

 

예를 들어 아래와 같이 저장할 32비트 크기의 정수가 있다고 가정해보자.

0x12345678

 

이 정수는 각각 아래와 같이 1바이트값 4개로 구성된다.

0x12, 0x34, 0x56, 0x78

 

이 4개의 1바이트 값을 빅 엔디안 방식으로 저장하면 다음 그림과 같이 저장된다.

 

 


 

리틀 엔디안 ( little endian )

리틀 엔디안 방식은 낮은 주소에 데이터의 낮은 바이트 ( LSB, Least Significant Bit )부터 저장하는 방식이다.

이 방식은 평소 사용하는 숫자를 사용하는 선형 방식과는 반대로 수를 거꾸로 읽어야 한다.

대부분의 인텔 CPU 계열에서는 리틀 엔디안 방식으로 데이터를 저장한다.

 

위에서 예를 든 정수 "0x12345678"를 리틀 엔디안 방식으로 저장하면 아래 그림과 같이 저장된다.

 


 

빅 엔디안 vs 리틀 엔디안

빅 엔디안과 리틀 엔디안은 단지 저장해야 할 큰 데이터를 어떻게 나누어 저장하는가에 따른 차이일 뿐, 

어느 방식이 더 우수하다고 단정할 수 없다.

 

물리적으로 데이터를 조작하거나 산술 연산을 수행할 때는 리틀 엔디안 방식이 더 효율적이다.

하지만 데이터의 각 바이트를 배열처럼 취급할 때는 빅 엔디안 방식이 더 적합하다.

 

윈도우에서는 리틀 엔디안 방식을 사용하고 있다.

하지만 네트워크를 통해 데이터를 전송할 때는 빅 엔디안 방식이 사용된다.

따라서 인텔 기반의 시스템에서는 소켓 통신을 할 때는 바이트 순서에 신경을 써서 데이터를 전달해야 한다.

 

+ Recent posts