Little Endian, Big Endian 컴퓨터 팁

음냘, 전공교재에서 배웠던 것 중에 많이 헛갈리던 것이 Little Endian 과 Big Endian 개념이다. 

엔디안 음.. 일단 이것이 무엇인디? 갑자기 뜬금포.. 하지만, 누가 물어봤는데.. 생각이 나지 않았다. 그냥 그뿐. 

컴퓨터나 디지털 시스템에서는 데이터를 저장하고 다룬다. 이때 데이터의 가장 작은 단위는 어떤 '값' 또는 '숫자' 같은 것인데.. 이 숫자는 컴퓨터(또는 디지털시스템)의 최소 저장단위보다 보통 큰것이 현실이다. 저장단위는 메모리, 또는 레지스터라고 불리는 저장소의 가장 작은 단위로 주소를 통해서 참조될 수 있는 것이라고 이해하시면 되겠다. 그림으로보자. 

메모리에 넣어야할 숫자: 87654321 (팔천칠백육십오만사천삼백이십일)
메모리 단위 저장소: 10진수 2자리

상기와 같은 가정으로 저장하는 방법은 아래와 같이 두가지 일 수 있다. 

1. Big Endian: 큰자리수부터 저장해서 작은 자리수에서 끝난다. (읽을 때도 마찬가지)
이렇게 작은 메모리 주소에 큰수가 저장되는 것을 Big Endian (큰수가 끝에)이라고 부른다. 
근데 좀 이상하다.. '21(이십일)' 보다 '87(팔천칠백만)'이 더 큰수인데.. 큰수부터 저장하는 것이라고 Big Starter 쯤이 더 맞는 표현이 아닐까? 

이것의 유래는 디지털 HW를 표현하는 Convention때문인데.. HW 설계도에는 보통 큰주소를 앞쪽에, 작은주소를 뒤쪽에 적는다. 
즉, 아래 그림(인지 표인지)를 보자. 
'87(팔천칠백만)'을 끝에 적으니.. Big Endian 이라고 (Endian이라는 말은 걸리버 여행기에서 삶은 달걀의 어느쪽을 먹느냐..에 관련 된 우화를 본따서 메모리를 어던 순으로 적는 것을 다투는 사람들을 비꼬는 이야기에서 비롯된 용어가 굳어진 것이라고 한다.)

이제 대강 이해 됐을 것이다. 근데 '빅엔디안'으로 만들면 머가 좋을까? SW에서는 HW Convention과는 다르게 작은 메모리 주소부터 적고 읽는다. 메모리 주소를 오름차순으로 읽으면 87, 21, 65, 43, 21 순서로 읽으니 프로그래머들이 덜 헷갈릴 것이다. 하지만, HW 만드는 사람은 개발할 때 헷갈릴 수 있겠다. 숫자가 뒤집혀 적혀 있으니.. 덧셈을 만들때도 읽은 값을 전송할 때도 한번씩 더 생각해야겠다.. 

2. Little Endian: 작은자리수부터 저장해서 큰 자리수에서 끝난다. 
위에 다 설명했으니.. 요즘은 머 대부분의 CPU가 인텔이고 인텔이 선택한 Little Endian의 세상이라고 말해도 과언이 아니다. 그나마 RISC (Reduced Instruction Set Computer)인 ARM도 기본 모드가 Little Endian이니 말 끝났지 머. 그러니 사실 Big Endian보다는 Little Endian의 동작을 잘 이해할 필요가 있겠다. 

'리틀엔디안'은 작은수부터 적고 읽는다. 그것만 이해하자. 끝. 넝담 아래 표를 보자.

메모리 주소

저장값

1

21

2

43

3

65

4

87


작은 주소에 작은 값을 큰 주소에 큰값을.. HW 만드는 사람에게는 아주 이해가 팍! 좋다. 왜 'Little Endian'이라고 할까? 아래 표를 보면.. 

메모리 주소

4

3

2

1

저장값

87

65

43

21


이해팍! 작은 숫자'21(이십일)'를 끝에 적으니.. 머 그런 이야기다. 

하지만 SW개발자(사실 어셈블러 개발자겠지..)들은 매우매우 헷갈린다. 첫번째 주소부터 읽으면 숫자가 21 43 65 87로 읽어들여진다. 그럼 뒤집어서 바라봐야 원하는 결과로 이해할 수 있다. 즉 Stack에 읽힌 숫자를 넣고 다시 뽑으면서 적절한 자리수를 곱해야 87654321이 되겠다... 디테일을 너무 따지지 말자. 그냥 개념이 그렇다는 이야기이다. 

물론 요즘 SW 개발자는 저런거 고민할 필요 없이 변수에 숫자를 넣으면 컴파일러가 알아서 해주니 .. 신경 쓸 영역은 아니나, 어셈블러를 다루거나, Embedded SW 개발자들 또는 Device Driver등을 개발하는 사람들은.. 알아두어야할 개념이겠다. 

끝.

각설)

사실 이거 적고 나면 잊어 먹는다. 담에 또 이걸 찾아봐야할 것 같아서.. 정리해보았다지만, 또 누가 물어보면 이걸 여기에 적어놓은 사실마저 까먹고 인터넷 검색을 하고 있을지도 모르겠다.


1 2 3 4 5 6 7 8 9 10 다음