시작하기 전에
이 글은 내가 가끔은 제대로 생각하기도, 때로는 잘못생각하기도 했던 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만 보다 보니 이제 요놈이 더 편한 것 같다. ㅋ