빅 엔디언 대 리틀 엔디언
엔디언, Endianness
컴퓨터에서는 바이트 단위(8Bit)로 메모리 주소가 할당되고
바이트 이상의 데이터가 저장될 때는
1차원 메모리 공간에 여러 개의 연속된 대상을 저장한다.
엔디언은 1차원 메모리 공간에 데이터를 배열하는 방법이다.
특히 순서를 따져 바이트를 배열하는 방법을 Byte order라고한다.
데이터의 MSB, LSB
예시 데이터
0xA192645C -> 4Byte int형 데이터
MSB = 0xA1 = 1010 0001
LSB = 0x5C = 0101 1100
같은 데이터라도
어떻게 해석하냐에 따라 다른 값이 나옴.
Float - Big Endian
Float - Little Endian
UINT32 - Big Endian
UINT32 - Little Endian
.
.
.
INT16 - Big Endian
Int16 - Little Endian
...
온라인으로 쉽게 확인해볼 수 있다.
빅 엔디언
첫번째 메모리 주소에 데이터의 가장 높은 값 저장.
데이터가 49, 22, 21, 8, 92, 85, 55, 10
메모리 주소가 1 2 3 4 5 6 7 8
라면
메모리의 주소 1부터 순서대로 채워나간다.
데이터 값 49 22 21 08 92 85 55 10
메모리 index 01 02 03 04 05 06 07 08
사람이 숫자를 연속적으로 종이에 써 나갈 때의 순서와 같아서
디버깅할 때 보기가 편하다.
- UNIX를 사용하는 RISC 프로세서 계열
- 네트워크 프로토콜에서 표준으로 사용하는 바이트 순서
리틀 엔디언
첫번째 메모리 주소에 데이터의 가장 작은 값을 저장.
메모리의 주소 8부터 역순으로 채워나간다.
데이터 값 10 55 85 92 08 21 22 49
메모리 index 01 02 03 04 05 06 07 08
일부 하위비트를 사용할 때
- Intel cpu에서 주로 사용
- 가장 낮은 바이트부터 처리하는 cpu에서 연산에 더 효율적일 수 있음.
- 다른 비트 시스템(32비트 시스템, 16비트 시스템)에서 데이터 처리 시
리틀 엔디언을 사용하는 CPU는 별도의 조작 없이
리틀 엔디언을 사용하는 CPU는 별도의 조작 없이
상위 바이트에 접근하지 않고 무시하면 됨.
미들 엔디언
한 방향으로 쭉 저장되는 것이 아닌
32비트 정수가 2바이트 단위로는 빅 엔디언이고
그 안에서 1바이트 단위로는 리틀 엔디언인 경우가 종종 있는데
이를 미들 엔디언(Middle-endian)이라 한다
빅 엔디언 <-> 리틀 엔디언간 변환
데이터가 어디서 끊어지는지, 경계에 따라 달리 변환해야한다.
16비트(2바이트)
32비트(4바이트) 환경을 예로 들면
16비트 환경에서는 2바이트씩 끊어서 순서를 바꿔주고
32비트 환경에서는 4바이트씩 끊어서 순서를 바꿔준다.
댓글
댓글 쓰기