엔디언는 아래와 같이 위키백과에서 자세히 정의를 해두었다.
엔디언(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에는 어떻게 저장해야 할까?
빅 엔디언(Big-endian)은 아래와 같이 큰 단위부터 숫자를 표현하는 것을 말한다. 가장 큰 단위인 '12'부터 하위 주소에 저장을 한다. 이러한 방법을 사용하면 오른쪽과 같이 데이터를 표기하는 방법과 주소 내에 데이터 표기 순서가 동일하여 보기가 편하다는 장점이 있다.
리틀 엔디언(Little-endian)은 아래와 같이 작은 단위부터 숫자를 표현하는 것을 말한다. 가장 작은 단위인 '78'부터 하위 주소에 저장한다.
변수의 주소는 주로 하위 크기 단위의 주소로 표현하고, 그렇기 때문에 하위 주소에 해당하는 데이터를 가져올 때, 편리하다. 예를 들어 예제에서 하위 0x78를 가져오려면 빅 엔디언에서는 data의 주소 값(0x00)에 0x03을 더해서 접근해야하지만, 리틀 엔디언에서는 data의 주소 값(0x00)에서 바로 접근 가능하다.
요즘 컴퓨터는 빅 엔디언/리틀 엔디언을 모두 지원하며, 각 표기 방법에 따른 성능 차이는 없는 것으로 알려져있다.
[1] : https://ko.wikipedia.org/wiki/%EC%97%94%EB%94%94%EC%96%B8
'IT_Study > CS_Study' 카테고리의 다른 글
[Computer Architecture] (4-2) RISC-V Register 설명 (0) | 2024.04.27 |
---|---|
[Computer Architecture] (4-1) RISC-V란 무엇인가? (1) | 2024.04.27 |
[Computer Architecture] (2) Memory Alignment (2) | 2024.04.27 |
[Computer Architecture] (1-1) Pipelining (0) | 2024.04.24 |
[Parallel Computing] (14) Virtual Memory (0) | 2024.04.21 |
댓글