블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2794)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (11)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

DSP 프로그래밍에서 중요한 개념인 빅 엔디안 (Big Endian)과 리틀 엔디안 (Little Endian)에 대해 정리해보려고 한다.

원래 빅 엔디안과 리틀 엔디안은 걸리버 여행기에 나오는 소인국의 일화에서 처음 등장했다. 
소인국에서는 달걀의 껍질을 까서 먹을때 뭉툭한 곳(Big End)을 깨서 먹어야 하는지, 뽀죡한곳 (Little End)를 깨서 먹어야 하는지에
대한 논쟁이 일어났는데, 그때 뭉툭한곳을 주장하는 사람들을 Big Endian이라고 하고, 뾰족한 곳을 주장하는 사람들을 Little Endian이라고 불렀다. 이 소설에서의 용어를 가져와서 사용하게 되었다.

위키백과에 들어가보면 Endianess를 컴퓨터의 메모리같은 1차원 공간에 여러개의 연속된 대상을 배열하는 방법을 뜻한다고 한다. 이 대상에는 Word가 될수도 있고, Byte가 될수도 있고 bit가 될수도 있다. 

빅 엔디안과 리틀 엔디안 둘중 어느것이 우월하다고 말하기는 어려우며, 상황에 따라 다르다고 할수 있다. 



다음의 예는 영문 위키백과에서 따옴을 밝힌다.
1) 빅 엔디안
예를 들어 레지스터에 0A0B0C0D의 8비트 정보들이 있고, 메모리 주소는 1바이트씩 증가한다고 하면,
메모리 주소가 a, a+1, a+2, a+3으로 증가한다고 했을때 다음과 같이 mapping 된다.


a: 0A
a+1: 0B
a+2: 0C
a+3: 0D

즉, MSB에서 부터 주소가 증가하는 방향으로 데이터가 메모리에 저장되게 된다.

2) 리틀 엔디안
위와 같이 똑같은 가정을 했을때 리틀엔디안에서는 다음과 같이 mapping된다.

a: 0D
a+1: 0C
a+2: 0B
a+3: 0A

즉, 빅 엔디언과 반대방향으로 메모리에 데이터가 저장되게 된다.

<빅 엔디언과 리틀 엔디언의 장단점>

빅 엔디언의 장점 : 사람이 읽고 쓰는 방법과 같은 순서로 데이터가 저장되기 때문에, 디버깅이 편하다.
빅 엔디언의 단점 : 연산에 따라 수가 커지면 왼편에 자리수를 추가하기 위해서 기존에 저장된 모든 데이터를 오른쪽으로 옮겨야 하는 경우가 발생한다.

리틀 엔디언의 장점 : 수가 커질때 새로운 자리수가 단순히 오른편에 추가만 하면 된다. 즉 연산이 빨라진다.
리틀 앤디언의 단점 : 디버깅할때 사람의 읽는 방향과 반대이므로 편의성이 떨어진다.



보통 인텔 프로세서 계열은 리틀 앤디언을, 모토롤라 프로세서 계열은 빅 앤디언을 쓴다고 한다.



출처 : http://pelleas.tistory.com/entry/%EB%B9%85-%EC%97%94%EB%94%94%EC%95%88Big-Endian-%EA%B3%BC-%EB%A6%AC%ED%8B%80-%EC%97%94%EB%94%94%EC%95%88Little-Endian

반응형
Posted by blueasa
, |