[OS] Big Endian & Little Endian

애이용·2021년 6월 20일
0

OS

목록 보기
12/16
post-thumbnail
post-custom-banner

Endian(엔디안)

컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열하는 방법
컴퓨터는 데이터를 메모리에 저장할 때 바이트(byte) 단위로 나눠서 저장한다.
바이트를 배열하는 방법을 바이트 순서(Byte order)라고 한다.

이때 바이트가 저장되는 순서에 따라 다음과 같이 3가지 방식으로 나눌 수 있다.

  1. 빅 엔디안(big endian): 보통 큰 단위가 앞에 나오는 것. 최상위 바이트(MSP)부터 차례대로 저장
  2. 리틀 엔디안(little endian): 작은 단위가 앞에 나오는 것. 최하위 바이트(LSB)부터 차례대로 저장
  3. 미들 엔디안: 두 경우에 속하지 않거나 둘을 모두 지원하는 것

빅 엔디안(big endian)

낮은 주소에 데이터의 높은 바이트(MSB, Most Significant Bit)부터 저장하는 방식이다.
(평소 숫자를 사용하는 선형 방식과 같은 방식)

장점 : 메모리에 저장된 순서를 그대로 읽을 수 있고 이해하기 쉽다.
예시 : 0x12345678을 빅 엔디안 방식으로 저장한다면 0x12 0x34 0x56 0x78

리틀 엔디안(little endian)

낮은 주소에 데이터의 낮은 바이트(LSB, Least Significant Bit)부터 저장하는 방식이다.
대부분 인텔 CPU 계열에서는 이 방식으로 데이터를 저장한다.

예시 : 0x12345678를 리틀 엔디안 방식으로 저장한다면 0x78 0x56 0x34 0x12

빅 엔디안 vs 리틀 엔디안

단지 저장해야 할 큰 데이터를 어떻게 나누어 저장하는가에 따른 차이일 뿐이다.

물리적으로 데이터를 조작하거나 산술 연산을 수행할 때에는 리틀 엔디안 방식이 더 효율적이고,
데이터의 각 바이트를 배열처럼 취급할 때에는 빅 엔디안 방식이 더 적합하다.
ex) 네트워크를 통해 데이터를 전송할 때에는 빅 엔디안 방식이 사용된다.
따라서 인텔 기반(리틀 엔디안 방식)의 시스템에서 소켓 통시을 할 때에는 바이트 순서에 신경을 써서 데이터를 전달해야 한다.

바이트 저장 순서 확인 소스 코드

#include <stdio.h>

int main() {
    int i;
    int test = 0x12345678;
    char* ptr = (char*)&test; // 1 바이트만을 가리키는 포인터를 생성함.

    for (i = 0; i < sizeof(int); i++)
    {
        printf("%x", ptr[i]); // 1 바이트씩 순서대로 그 값을 출력함.
    }
}

결과 확인

78563412 // 리틀 엔디안 방식
12345678 // 빅 엔디안 방식
profile
로그를 남기자 〰️
post-custom-banner

0개의 댓글