2014-10-24

Big endian과 little endian

 Endianness는 것은 메모리상에서 byte를 배치하는 방법을 말한다. 크게는 big-endian과 little-endian으로 구분된다.

Big endian

출처 : 위키피디아1)
 우선 big-endian은 가장 큰 byte(most significant byte, a.k.a. MSB)가 가장 앞에 나오는 방식이다. 일반적으로 사람이 사용하는 방식이라고 생각하면 된다.
 Big-endian은 사람이 흔하게 사용하는 방식이기 때문에 big-endian으로 기록되어 있는 값은 사람이 읽기 쉽고, bit order와 byte order, word order까지 일관성 있다.

Little endian

출처 : 위키피디아2)
 Little-endian은 가장 작은 byte(least significant byte, a.k.a. LSB)가 가장 앞에 나오는 방식을 의미한다. 다시 말해 위의 그림처럼 0x0A0B0C0D를 메모리에 올리고, 메모리를 순서대로 읽으면 0x0D0C0B0A가 나온다는 것이다.
 처음 little-endian을 보면 이게 도대체 뭐하는 짓인가 싶은데 현대의 컴퓨터들은 대부분 little-endian을 이용한다. 왜냐하면 인텔이 머신을 이렇게 만들었으니까. 그렇다면 인텔은 왜 little-endian을 사용할까?

 Little-endian이 컴퓨터에서 컴퓨터의 연산을 아주 미묘하게 빠르게 만들어준다. little-endian을 사용하면 아무런 연산 없이 사이즈가 다른 변수로 casting 할 수 있다. 또한, 덧셈할 때도 little-endian을 사용하는 게 chip을 설계하기 쉽다. 언제나 LSB의 offset이 0으로 같아서 몇 바이트 변수를 더하더라도 언제나 offset이 0인 byte부터 시작하여 더하여 올릴 수 있기 때문에 쉽게 가산기를 구현할 수 있다.

 근데 이게 사람이 메모리를 읽기 어렵게 만들면서까지 성능을 올릴 필요가 있는지는 모르겠다. 개인적인 생각으로는 이렇게까지 해서 성능을 올리고 칩을 간단하게 만들 필요가 있을지 잘 모르겠다. 하지만 인텔이 little-endian을 사용하고 있으니 앞으로도 계속 사용될 듯하다.

1) http://en.wikipedia.org/wiki/Endianness
2) http://en.wikipedia.org/wiki/Endianness

 혹시 endianness에 대해 더 궁금한 것이 있다면 Danny Cohen이 쓴 ON HOLY WARS AND A PLEA FOR PEACE를 읽어보면 도움이 될 것이다.

댓글 없음:

댓글 쓰기