컴퓨터에 데이터가 저장되는 구조를 Byte Order로 표현할 수 있다.
: 컴퓨터에 데이터가 저장되는 최소 단위는 1byte이다.
: 일반적으로 왼쪽이 낮은 주소, 오른쪽이 높은 주소라고 할 때.
왼쪽에서 오른쪽으로 읽어서 메모리에 저장하느냐, 오른쪽에서 왼쪽으로 읽어서 메모리에 저장하느냐에 따라 방식이 나눠진다.
그래서 컴퓨터에 데이터가 저장되는 구조를 Byte Order라고 하며, Byte Order에는 big endian과 small endian이 있다.
컴퓨터에서 데이터가 저장되는 최소 단위는 1 byte이다. 1 byte = 8 bits인데, 이 bit들은 항상 왼쪽에서 오른쪽으로 읽는 방식을 취한다.
데이터를 오른쪽에서 왼쪽으로 읽는다고 해서 bit도 전부 오른쪽에서 왼쪽으로 읽지 않는다.
예를 들어, "안녕하세요"에서 '안'이 1011010라고 할 때, "요세하녕안"이라고 읽는다고 해서 '안'의 bit이 0101101로 읽지는 않는다. '안'은 그대로 1011010이라고 읽게된다.
그래서 1 byte인 데이터를 읽는데는 왼쪽에서 읽든, 오른쪽부터 읽든 순서가 관계 없기 때문에 byte order가 의미없다.
register에 있는 데이터를 메모리에 저장할 때, 어떤 순서로 저장시킬 것인가.
Endian 방식은 CPU에 의해 결정된다.
Intel 계열은 Little Endian 방식을 사용하고, IBM이나 RISC 기반 컴퓨터들은 Big Endian 방식을 사용
왼쪽에서 오른쪽으로 읽는 방식이다.(큰 단위를 먼저 읽는다.) 그래서 보통 왼쪽에서 오른ㄴ쪽으로 데이터를 읽는 이러한 방식을 bit endian + bit order 방식을 취한다고 표현한다.
0x123456을 메모리에 저장한다고 할 때, 1byte단위로 데이터를 끊어보면, 12 34 56으로 끊을 수가 있다. 이 때, big endian 방식을 취하면 메모리에는 12 34 56으로 저장된다.
오른쪽에서 왼쪽으로 읽는 방식이다. (작은 단위를 먼저 읽는다)
위 예시와 마찬가지로, 0x123456을 12 34 56으로 끊었을 때, little endian 방식을 취하면, 메모리에는 거꾸로 저장된다. 즉, 56 34 12 순으로 저장된다.
[register에 저장된 값]
0x123456 |
---|
[memory에 저장되는 방식]
memory address | bit endian | little endian |
---|---|---|
낮 | 12 | 56 |
34 | 34 | |
높 | 56 | 12 |
수치 계산: little endian이 속도가 더 빠르다. (보통 수치 계산은 뒤에 있는 숫자들부터 계산하고, 올림하는 방식으로 계산하기 때문)
따라서 수학적 연산 = little endian
숫자 대소 비교/사전적 비교: 어떤 수가 큰지 비교 (큰 자리 숫자부터 비교), 사전단위 비교도 제일 왼쪽부터 비교. big endian이 유리
little endian 방식의 컴퓨터와 big endian 방식의 컴퓨터 사이에서 통신 문제? 네트워크 연결해서 통신할 때. 그냥 연결하면 이상한 값이 참조되는 불상사가 발생. 1234라는 데이터를 가져올 때, little endian에서는 3412로 읽고, bigendian에서는 1234로 읽기 때문.
그래서 보통 이들 사이의 약속으로, 네ㅔ트워크에서 데이터 주고받을 때는 big endian방식을 취하고, 대부분의 socket 통신 내장 함수들에는 내부적으로 endian 처리가 다 구현되어 있음.