Search
Duplicate
📗

리틀 엔디안, 빅 엔디안

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
시스템
Scrap
태그
9 more properties

엔디안(Endianness)

엔디안이란 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라 한다.
엔디안은 보통 큰 단위가 앞에 나오는 빅 엔디안(Big-endian)과 작은 단위가 앞에 나오는 리틀 엔디안(Little-endian)으로 나눌 수 있으며, 두 경우에 속하지 않거나 툴을 모두 지원하는 것을 미들 엔디안(Middle-endian)이라 부르기도 한다.
빅 엔디안은 최 상위 바이트(MSB - Most Significant Byte)부터 차례로 저장하는 방식이고, 리틀 엔디안은 최 하위 바이트(LSB - Least Significant Byte)부터 차례로 저장하는 방식이다.
그림만 보고는 잘 이해가 안될 수 있다. 우선 Memory는 우리가 익히 아는 RAM(Random Access Memory)이고, 32-bit integer 저 부분은 Register다. 각각의 장단점에 대해 알아보자.
1.
덧셈 연산
1234 + 5678을 예시로 들어보겠다. 사람이 계산할 때도 마찬가지지만, CPU가 계산할 때도 오른쪽에서 왼쪽으로 계산한다. 맨 오른쪽에서부터 계산하면 4 + 8 이므로 carry가 생겨서 1을 다음 자리수에 올려준다.
컴퓨터 이므로 hex값으로 예시를 들어보겠다.
메모리 상으로 구현을 해보면 각 엔디안의 경우 위 처럼 저장된다.
리틀 엔디안의 경우 carry 발생시 처리가 수월한 것을 볼 수 있다.
2. 타입 형변환
리틀 엔디안의 경우, 어떤 타입의 시작 주소에 값이 들어간다는 특징이 있다. 내가 int타입에 0x12를 저장하면 아래 그림처럼 들어갈 것이다.
리틀 엔디안의 경우에는 형 변환이 빠르다. 만약 int8_t 값으로 CAST하고 싶다고 한다면, 리틀 엔디안은 데이터 시작 주소부터 8bit까지만 잘라주면 형 변환이 된다. 반면에 빅 엔디안의 경우에는 앞의 0을 쭉쭉 끝까지 읽어서 맨 뒤의 8bit를 취해야 한다. 따라서 형 변환은 리틀엔디안이 빠르다.
3. 숫자 비교
빅 엔디안은 최 상위 바이트(MSB)가 메모리 가장 처음에 위치한다는 특징이 있기 때문에, 제일 큰 자리수부터 비교하기 때문에 리틀엔디안에 비해서 빠르다.
4. 디버깅, 확인
사람이 숫자를 읽고 쓰는 방법이 빅 엔디안과 동일하기 때문에 빅 엔디안이 리틀 엔디안에 비해서 소프트웨어 디버그가 편하다.
출처 :