#3. Big Endian, Little Endian

컴퓨터구조론 2023. 12. 14. 22:03
반응형

이번 글에서는 MIPS의 Big/Little Endian 특성에 대해서 짚고 넘어가자

MIPS에서는 Big endian을 사용하고, intel 이나 Risc V 에서는 Little Endian을 주로 사용한다. Endian은 데이터를 저장하는 방식을 일컫는다.

1. Big endian/ Little Endian


Big endian은 낮은 주소에서부터 데이터의 MSB부터 저장하는 방식을 의미한다.

만약 0x 01234567을 저장한다고 생각해보자. 그럼 메모리상에서 주소를 찾아 이를 저장해야 할텐데,


Big endian으로 저장한다면, 현재 MSB가 0이고, 낮은주소에서부터 MSB(상위바이트)를 저장하므로 0부터 7까지의 순서로 저장하게 되는 것이다. 그림으로 표현하면 다음과 같다.

Little endian 으로 저장한다면 반대로 높은 주소에서부터 MSB를 저장하게 되고, 이를 그림으로 나타내면 이렇게 데이터를 저장하게 된다.

한 줄로 정의 하자면

Big-endian : 낮은 주소에 상위 바이트부터 기록하는 것(MSB가 상위 바이트)

Little-endian : 낮은 주소에 하위 바이트부터 기록하는 것

즉 Endian방식에 따라 주소값을 불러와서 읽는 순서가 달라질 수 있다.


2.  Endian방식에 따른 장단점


그렇다면 Big endian과 Little endian을 사용했을 때, 각각의 장단점은 무엇일까.

직관적으로 봤을 때에는 뭔가 낮은 주소에서부터 MSB를 적는 것이 더 이해가 쉬울 것 같다.

그런데, 컴퓨터의 입장에서는 연산을 해야 하므로, 덧셈을 하는 과정을 생각해보자. 기본적으로, 컴퓨터는 메모리를 낮은 주소에서부터 읽기 때문에 낮은 주소에 하위비트에 오는 것이 좋다.

우리도 연산을 할때 생각해보면, 일의 자리수부터 덧셈을 하여 받아올림을 하는 것과 동일 하다. 낮은 자리수(하위비트)에서부터 연산이 시작되어야, 받아올림(Carry)을 연산하기 더 쉽기 때문에 Little Endian을 채택하는 CPU들도 있는 것이다.

우리도 하위비트에서부터 연산한다.



이와 별개로, 통신 및 네트워크에서는 Big endian방식으로 통일 되어 있다고도 한다.

그러나 마지막 주의할 점은, Byte단위로 저장되고, 그 안의 bit단위가 뒤집어 지지는 않는다는 것이다.

예를 들어, Big endian 으로 0001 0010 0100 1000 을 저장한다면
이를 Little endian 으로 읽을 때에는 아예 뒤집어서 거꾸로 0001 0010 0100 1000 이렇게 읽는게 아니고, byte 단위(여기선 숫자 4개씩) 1000 0100 0010 0001 이렇게 읽게 되는 것이다. 즉, 하나의 단위 안에서는 뒤집어 지지 않는다.(하나의 주소값 위치 안에서는 Big-endian이 된다는 것)

헷깔릴 수도 있겠지만, 몸에 점차 베어 간다고 생각하자.



반응형