Little-endian, Big-endian
Little-endian
, Big-endian
은 여러 바이트를 메모리에 순차적으로 배치할 때, 어떤 순서로 배치할 지에 대한 byte order
를 뜻한다. 여러 바이트를 배치할 때의 순서기 때문에 한바이트 안에서는 의미가 없다. byte
나 char
같은 1 byte
자료형은 상관이 없음. 2 byte
이상의 int
, short
, float
, double
, string
등이 연관이 생긴다.
Little-endian
은 주로 intel 프로세스 계열,
Big-endian
은 Unix 계열의 RISC 프세서 계열에서 사용한다.
Middle-endian
이라는 둘다 되는 애도 있다고 한다.
0x12345678
이란 데이터와 0x48656C6C6F
(Hello) 이런 데이터를 테이블로 예시를 들어보면..
memory address>>> | 0x0100 | 0x0101 | 0x0102 | 0x0103 | 0x0104 |
---|---|---|---|---|---|
Little-endian 0x12345678 | 0x78 | 0x56 | 0x34 | 0x12 | - |
Big-endian 0x12345678 | 0x12 | 0x34 | 0x56 | 0x78 | - |
Little-endian 0x48656C6C6F | 0x48 | 0x65 | 0x6C | 0x6C | 0x6F |
Big-endian 0x48656C6C6F | 0x6F | 0x6C | 0x6C | 0x65 | 0x48 |
Little-endian
은 메모리의 낮은 주소에 값의 작은 자리 수 부터 적고,
위의 표를 참고하면, 0x0100 (메모리의 낮은 주소 0x0100 < 0x0103) 에 0x12345678 의 0x78 (작은 자리 수)
Big-endian
은 낮은 주소에 값의 큰 자리 수 부터 적는다. 0x0100 (메모리의 낮은 주소 0x0100 < 0x0103) 에 0x12345678 의 0x12 (큰 자리 수)
따라서 수의 비교처리는 Big-endian
이 빠르고, 가산연산은 Little-endian
이 빠르다는 말이 있지만,
요즘 프로세서는 가산연산을 할 때, 동시처리를 하기 때문에 Little-endian
이 Big-endian
보다 가산연산이 빠르진 않다고 한다.
또 다른 이점으로는 Big-endian
은 사람이 읽는 순서대로 바이트를 적기 때문에 디버깅이 편하다고 하는데… 디버깅을 바이트코드를 보며 한지가 오래되서 잘 모르겠다.
네트워크 상에서 데이터를 주고 받을때는 Big-endian
으로 한다고 한다.
Big-endian 은 윈도우에서 쓰니까 사람한테 편하게 적고 Little-endian 은 유닉스에서 쓰니까 기계한테 편하게 적는다 라고 내맘대로 외어버림.