본문 바로가기

Wealth management/Tips

Little endian vs. Big endian

당연히 알고 있다 생각 했는데 설명을 할 수 없었다.

CPU가 데이터를 저장하는 방식을 구분한 것이며 이기종 CPU 간의 통신 또는 데이터 호환이 필요한 경우, Byte ordering의 문제를 고려해야 한다. Bit ordering의 경우에는 모든 CPU가 big endian을 사용하고 있기 때문에 문제가 되지 않는다.
Big endian은 사람이 생각하고 적는 방식이다. 즉, 높은 자리수가 낮은 주소번지에 저장 되기 때문에 0x1234를 12 34의 형태로 저장한다. 반면, little endian은 기계의 입장에서 자연스러운 저장 방식이다. 높은 자리수를 높은 주소번지에 저장하는 형태로 34 12로 저장되는데, 이는 연산 중에 overflow가 발생하는 경우 상위 bit로 carry를 넘기는 CPU의 기본 동작을 생각해 보면 너무나 당연한 것이다.
Intel과 AMD 계열의 CPU는 big endian 방식을 사용하고 Motorola 계열은 littel endian을 사용한다. 반면 ARM 프로세서는 compile 시에 선택이 가능하다. 통신 프로토콜도 big endian 방식을 사용하는데 낮은 자리수에 위치한 높은 자리수가 먼저 전송 된다는 의미이고 항상 에러가 발생할 수 있는 통신 환경에서는 중요한 정보(MSB)가 잘 도착한 후 사소한 정보(LSB)를 보내는 것이 효율적이기 때문이다.

참고로 endian에 대한 용어는 걸리버여행기에서 달걀의 뾰족한 부분과 뭉툭한 부분 중 어느 쪽을 깨서 먹을지를 놓고 서로 편을 가른데서 유래 되었다고 한다. UNIX에서 byte ordering에 관한 문제를 NUXI problem로 부르기도 한다.