빅엔디안(Big Endian) vs 리틀엔디안(Little Endian)

2023. 6. 6. 22:55High Level Programming Language

🔥 빅엔디안(Big Endian) vs 리틀엔디안(Little Endian) 완전 정복

 

1. Endian(엔디안)이란 무엇인가? 🧠

컴퓨터는 데이터를 메모리에 저장할 때,
여러 바이트로 구성된 값(2바이트, 4바이트, 8바이트 등)을 어떻게 나열할지를 결정해야 합니다.

이때 가장 중요한 개념이 바로 엔디안(Endian)입니다.

Endian = "멀티바이트 데이터 저장 순서 규칙"

 

2. Big Endian과 Little Endian ✨

엔디안은 두 가지 방식이 있습니다:

용어 설명 이모지 비유
Big Endian 가장 큰 바이트먼저 저장 🏰👶 (큰 것 먼저)
Little Endian 가장 작은 바이트먼저 저장 👶🏰 (작은 것 먼저)

 

🔵 Big Endian (🏰👶)

  • 메모리의 낮은 주소가장 상위 바이트(MSB) 저장
  • 사람이 숫자를 읽는 방식과 비슷함 (왼쪽부터 큰 자리수)

예시:

32비트 값 0x12345678을 메모리에 저장하면:

주소 값 (Big Endian)
0x00000000 0x12
0x00000001 0x34
0x00000002 0x56
0x00000003 0x78

→ 큰 바이트부터 메모리에 저장합니다.

 

🔵 Little Endian (👶🏰)

  • 메모리의 낮은 주소가장 하위 바이트(LSB) 저장
  • 반대로, 가장 작은 자리수가 먼저

예시:

같은 32비트 값 0x12345678을 메모리에 저장하면:

주소 값 (Little Endian)
0x00000000 0x78
0x00000001 0x56
0x00000002 0x34
0x00000003 0x12

→ 작은 바이트부터 메모리에 저장합니다.

 

3. 요약 다이어그램 🎯

Big Endian (🏰👶):
[0x12][0x34][0x56][0x78] (큰 것부터 저장)

Little Endian (👶🏰):
[0x78][0x56][0x34][0x12] (작은 것부터 저장)

 

4. 누가 어떤 방식을 사용하는가? 🌍

아키텍처/환경 엔디안 방식 비고
Network Protocol (TCP/IP 등) Big Endian "Network Byte Order"라고 부름
x86 (Intel, AMD PC CPU) Little Endian Windows, Linux PC 대부분
ARM CPU 기본 Little Endian (Big도 지원) 스마트폰, 임베디드
SPARC, PowerPC (구형) Big Endian (또는 Dual) 서버용

인터넷 네트워크 표준은 항상 Big Endian을 사용합니다! (TCP/IP, IP Header 등)

 

5. Big Endian vs Little Endian 비교 정리 🔥

항목 Big Endian Little Endian
메모리 저장 순서 큰 바이트 먼저 작은 바이트 먼저
사람이 읽는 방식과 유사성 높음 낮음
네트워크 표준 사용 (Network Byte Order) 사용하지 않음
x86 아키텍처 사용하지 않음 기본 사용
속도 최적화 측면 (x86) 불리함 유리함
메모리 덤프 분석 쉽다 헷갈릴 수 있다

 

6. 왜 Little Endian이 PC에서 기본이 되었는가? 🤔

주요 이유:

  • 산술 연산 최적화:
    • 덧셈, 뺄셈 연산 시, 낮은 자리수부터 처리하는데,
      Little Endian이면 메모리 접근이 자연스러움.
  • 확장성:
    • 8비트 → 16비트 → 32비트 → 64비트 확장 시 주소 재배치 없이 가능.

결론:
CPU 산술 속도를 높이기 위해 Little Endian이 채택되었습니다.

(특히 x86 아키텍처가 전 세계를 점령하면서 사실상 Little Endian이 "현실 표준"이 되었습니다.)

 

7. 엔디안 변환이 필요한 경우 🚚

다른 엔디안 방식 간에 데이터를 주고 받을 때는 변환이 필요합니다.

예를 들어:

  • PC(Little Endian) ↔ 네트워크 장비(Big Endian) 간 통신
  • Windows ↔ ARM 서버 간 바이너리 파일 이동

변환 함수 예시(C 언어):

uint32_t htonl(uint32_t hostlong); // Host to Network Long (Big Endian으로 변환)
uint32_t ntohl(uint32_t netlong);  // Network to Host Long (Host 엔디안으로 변환)

✅ 운영체제나 네트워크 프로토콜에서는 항상 이런 변환을 수행합니다.

 

✨ 최종 요약

항목 요약
Big Endian 큰 바이트를 먼저 저장, 네트워크 표준
Little Endian 작은 바이트를 먼저 저장, x86 기본
사용 추세 네트워크 프로토콜은 Big, PC/모바일은 Little
엔디안 변환 다른 시스템 간 통신 시 반드시 필요

 

🔥 한 문장 요약

"Big Endian은 큰 것부터 저장, Little Endian은 작은 것부터 저장하며, 네트워크는 Big, 현대 PC는 Little이 주류다."