현대 아키텍처에서의 엔디언 동작

x86, ARM, MIPS, RISC-V, PowerPC 등 현대 CPU 아키텍처에서의 엔디언 동작을 살펴봅니다.


x86/x86-64 (Intel, AMD)

항상 Little-endian. 변경 불가능.

// x86에서 0x12345678을 메모리에 저장하면
uint32_t value = 0x12345678;
// 메모리 덤프: 78 56 34 12

장점:

  • 포인터 캐스팅이 자연스러움
  • 가변 길이 정수 처리 용이
uint32_t big = 0x12345678;
uint16_t *small = (uint16_t *)&big;
// *small = 0x5678 (하위 16비트를 그대로 읽음)

ARM (ARMv7, ARMv8/AArch64)

Bi-endian이지만 실질적으로 Little-endian 세상

ARMv8-A 상태:
- 기본: Little-endian (EL0, EL1, EL2, EL3 모두)
- Big-endian 지원: SCTLR 레지스터의 EE/E0E 비트로 설정 가능
- 현실: iOS, Android, Linux 모두 Little-endian 사용

ARM의 특이한 기능 - REV 명령어:

// ARM에서 바이트 순서 뒤집기
REV W0, W1    // 32비트 엔디언 스왑
REV16 W0, W1  // 16비트 단위로 스왑

MIPS

설정에 따라 달라지는 Bi-endian

Big-endian 모드 (BE=1):
- 네트워크 장비 (Cisco 라우터 등)
- SGI 워크스테이션

Little-endian 모드 (BE=0):
- PlayStation
- Windows CE 기기
- 대부분의 임베디드 시스템

RISC-V (최신 아키텍처)

기본 Little-endian, Big-endian은 확장으로 지원

RISC-V 설계 철학:
"Little-endian을 기본으로 하되,
 필요한 경우 Big-endian 확장 가능"

실제로 거의 모든 RISC-V 구현체가 Little-endian

PowerPC / POWER

역사적으로 Big-endian, 현재는 선택 가능

PowerPC 역사:
1992-2006: Apple Mac에서 Big-endian
2006 이후: Apple은 Intel로 전환
현재 IBM POWER: Little-endian Linux 지원 (ppc64le)

참고 자료

  • Intel 64 and IA-32 Architectures Software Developer’s Manual
  • ARM Architecture Reference Manual
  • MIPS Architecture Reference Manual
  • RISC-V Specification