IT_Study/CS_Study

[Computer Architecture] (3) Big endian & Little endian

두번째얼룩 2024. 4. 27. 09:09

엔디언는 아래와 같이 위키백과에서 자세히 정의를 해두었다. 

엔디언(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라 한다.

엔디언은 보통 큰 단위가 앞에 나오는 빅 엔디언(Big-endian)과 작은 단위가 앞에 나오는 리틀 엔디언(Little-endian)으로 나눌 수 있으며, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들 엔디언(Middle-endian)이라 부르기도 한다.[1]

위에서 이야기하는 것처럼 'Byte를 어떻게 배열할 것인가'에 대한 방법을 말한다. 즉, Byte 내의 bit 배열은 서로 같다는 것을 의미한다. 예를 들어, 1-Byte의 크기를 가지는 Char인 경우, 어떤 방식을 사용하더라도 동일하게 표현된다는 것을 의미한다. 

 Data type이 1-Byte보다 큰 크기를 가지는 Short(2B), Int(4B), Float(4B), double(8B) 등이 해당된다. 

예를 들어 아래와 같이 int type Data가 선언되었고, 주소는 0x00부터 저장된다고 가정하자. 그러면 각 주소 0x00, 0x01, 0x02, 0x03에는 어떻게 저장해야 할까?

Int type 저장 예시

 

빅 엔디언(Big-endian)은 아래와 같이 큰 단위부터 숫자를 표현하는 것을 말한다. 가장 큰 단위인 '12'부터 하위 주소에 저장을 한다. 이러한 방법을 사용하면 오른쪽과 같이 데이터를 표기하는 방법과 주소 내에 데이터 표기 순서가 동일하여 보기가 편하다는 장점이 있다. 

Big-endian example

 

리틀 엔디언(Little-endian)은 아래와 같이 작은 단위부터 숫자를 표현하는 것을 말한다. 가장 작은 단위인 '78'부터 하위 주소에 저장한다.

Little-endian example

 

변수의 주소는 주로 하위 크기 단위의 주소로 표현하고, 그렇기 때문에 하위 주소에 해당하는 데이터를 가져올 때, 편리하다. 예를 들어 예제에서 하위 0x78를 가져오려면 빅 엔디언에서는 data의 주소 값(0x00)에 0x03을 더해서 접근해야하지만, 리틀 엔디언에서는 data의 주소 값(0x00)에서 바로 접근 가능하다.

 

 요즘 컴퓨터는 빅 엔디언/리틀 엔디언을 모두 지원하며, 각 표기 방법에 따른 성능 차이는 없는 것으로 알려져있다.

 

 

 

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

 

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

위키백과, 우리 모두의 백과사전. Big-Endian Little-Endian 엔디언(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특

ko.wikipedia.org