리루
Big Endian and Little Endian 본문
Endian : Byte ordering
Byte order의 차이는 CPU의 차이로 인해 발생한다.
엔디안이라는 단어는 "걸리버 여행기"에서 처음 나왔다. 소인국 사람들 중에 달걀을 깰때 뭉툭한 곳(Big-Endian)부터 깨는 사람들이 있는 반면, 뾰족한 곳(Little-Endian)부터 깨는 사람들이 있어서 서로 자신의 방법이 맞다고 주장하는 글에서 유래되었다.
Little Endian은 그 크기만큼 무조건 거꾸로 읽는다 가 힌트입니다. -
"Little Endian은 상위bit (MSB)를 상위 주소에 저장을 하고 있습니다
문자열 "wxyz"를 저장한다면 다음과 같이 표현이 가능하다.
주소 | Big Endian(MSB) |
Little Endian(LSB) |
0x1003 |
z |
w |
0x1002 |
y |
x |
0x1001 |
x |
y |
0x1000 |
w |
z |
이를 만약 두 바이트 포인터를 이용해서 0x1000부터 읽어 보면 littel-endian은 'yx','wx'가 읽히게 된다. Big-endian은 'wx','yz'의 값으로 읽힌다.
만약 한 바이트 포인터를 이용해서 읽어 보면 little-endian은 'z','y','x','w' 순으로 읽히게 된다. Big-endian 방식은 'w'.'x'.'y'.'z'로 읽힌다.
Little-endian의 경우는 포인터 변환이 될때마다 읽어 오는 순서가 바뀌게 된다. 다른 말로 Swap 되었다고 표현한다. 그러나 big-endian의 경우는 포인터 크기에 상관없이 항상 동일한 순서로 값들이 읽히게 된다. 이것만 놓고 보면 big-endian이 훨씬 좋아 보이게 된다. 특히 통신에 있어서는 big-endian방식이 유리한 점이 많아서 대부분 big-endian 방식으로 규격을 정의하는 경우가 많다. 이런 경우 little-endian방식의 CPU들은 big-endian 방식에 맞게 데이터 순서를 바꾸어주어야 하는 불편함이 따른다.
그러나 연산에 있어서는 Big-Endian 보다는 Little-Endian 방식이 유리하므로(산술연산유닛인 ALU에서 메모리를 읽는 방식이 메모리 주소가 낮은 쪽에서부터 높은 쪽으로 ㅇ릭기 때문에 산술연산의 수행이 더 쉽다.) 딱히 어느쪽이 더 좋은 방식이라고 할 수 는 없다.
출처: http://embed-avr.tistory.com/47 [AVR로 시작하는 임베디드]
'# Study > Network' 카테고리의 다른 글
Parity Bit와 Checksum (0) | 2017.04.05 |
---|---|
패킷을 통한 TCP/UDP 비교 (1) | 2017.03.27 |
흐름제어(Flow control)과 혼잡제어(Congestion control) (0) | 2017.02.06 |