본문 바로가기
Study/Programming

Endianness

by 강된장스무디 2020. 10. 4.

16진수 0x12345678을 저장하기 위해서는 4byte의 메모리 공간이 필요하다.

 

실제 메모리에는 이 값이 어떻게 저장될까?

 

컴퓨터 시스템 마다 차이가 있는데 크게 Little Endian과 Big Endian Mode가 있다. (+Middle Endian)

 

Little Endian은 인텔(x86)에서, Big Endian은 모토로라에서 사용했던 방식이다.

 

Little Endian은 높은 자리 수를 낮은 주소에, 낮은 자리 수를 높은 주소에 저장하고

 

Big Endian은 낮은 자리 수는 낮은 주소에, 높은 자리 수는 높은 주소에 저장한다.

 

0x12345678을 0x00001000번지에 저장하는 경우는 다음과 같다.

 

*(unsigned int*)(0x00001000) = 0x12345678;
address Little Endian Big Endian
0x00000fff ... ...
0x00001000 0x78 0x12
0x00001001 0x56 0x34
0x00001002 0x34 0x56
0x00001003 0x12 0x78
0x00001004 ... ...

 

디버깅 시에 어떤 값이 저장돼있는지 확인할 경우, Endian Mode가 무엇인지 확인할 필요가 있다.

 

또한, 서로 다른 시스템 사이에서 데이터를 주고 받게 되면, 특히나 1byte 단위로 통신을 하게 되면 문제가 된다.

 

PC의 경우, x86 CPU를 많이 사용하므로 Little Endian을 염두에 두면 편하지만

 

모토로라의 영향 때문인지 많은 네트워크 프로토콜에서 Big Endian을 사용하고 있으므로 일괄적으로 사용해서는 안된다.

 

ARM 프로세서에서는 Endian Mode를 지정할 수 있다. (Bi-Endian)

 

출처: en.wikipedia.org/wiki/Endianness

'Study > Programming' 카테고리의 다른 글

[C/C++] Implicit Conversions  (0) 2020.10.07
Memory Pool을 이용한 Linked List 구현  (0) 2020.09.26

댓글