본문 바로가기
Engineering/System

Endian 정리

by Humaneer 2009. 4. 7.

시작하기 전에

이 글은 내가 가끔은 제대로 생각하기도, 때로는 잘못생각하기도 했던 endian에 대해 확실하게 개념을 잡기위함이다. -_-
나중에 또 헷갈리면 찾아보기 위해 ㅋ

Big/Little Endian

CPU가 multi byte의 데이터를 메모리에 저장할 때 리틀 엔디안(Little Endian)과 빅 엔디안(Big Endian)의 방식이 있다. 2학년 때 어깨너머로 누구에게 잠깐 듣고나서 '으음 그렇군' 하고 넘어갔다가, 3학년 때 컴퓨터 구조수업 때 배우면서 '아하 그랬었군~!' 했던게 기억이 난다.

0x01234567 이라는 4바이트의 데이터를 메모리시작 주소 0x00에 저장한다고 하였을 때, Big/Little Endian은 아래와 같이 저장할 것이다. 간단하다 simple!

Memory Address

Data

Big Endian

Little Endian

0x00000000

0x01

0x67

0x00000001

0x23

0x45

0x00000002

0x45

0x23

0x00000003

0x67

0x01


그런데 내가 헷갈린 것은 1바이트씩 메모리에 쓸 때도 big endian이냐 little endian이냐를 따지는가, 그러지 말아야 하는가였다. 예를들면 0x01(0 0 0 0  0 0 0 1) 을 쓸 때에도 0 0 0 0 0 0 0 1인지 1 0 0 0 0 0 0 0인지가 헷갈렸었던 것이다. 너무 오버해서 생각했다고나 할까? ㅋ

endian은 multi byte를 쓸 때 어떤 순서로 쓰느냐에 따라 분기가 나뉘는 것이지 bit stream의 순서까지를 결정하는 것은 아니기 때문이다. bit stream은 Big/Little Endian에 상관없이 무조건 Big Endian이다. -_-

Intel계열 CPU는 little endian이고, 모토로라 계열은 big endian이다. 그리고 내가 업무에 쓰는 processor인 BF537역시 little endian이다. 맨날 little endian만 보다 보니 이제 요놈이 더 편한 것 같다. ㅋ