개발공부/CS

[운영체제] 바이트 오더링(Byte Ordering)?

카슈밀 2025. 2. 16. 01:23
반응형

바이트 오더링(Byte Ordering) 또는 **엔디안(Endian)**은 컴퓨터 시스템에서 멀티바이트 데이터를 메모리에 저장할 때, 각 바이트의 저장 순서를 정의하는 방식입니다. 즉, 멀티바이트 값을 메모리에 저장할 때, 그 값이 어떤 순서로 저장될지를 결정하는 규칙입니다.

1. 엔디안(Endian)의 종류

  • 빅 엔디안(Big Endian):
    • 가장 중요한 바이트(상위 바이트)가 메모리의 낮은 주소에 저장됩니다.
    • 예를 들어, 4바이트 값 0x12345678을 빅 엔디안 방식으로 저장하면, 메모리에는 다음과 같이 저장됩니다:
      주소:    0x00  0x01  0x02  0x03
      값:      0x12  0x34  0x56  0x78
      
    • 즉, 최상위 바이트인 0x12가 먼저, 최하위 바이트인 0x78이 마지막에 저장됩니다.
  • 리틀 엔디안(Little Endian):
    • 가장 중요한 바이트(상위 바이트)가 메모리의 높은 주소에 저장됩니다.
    • 예를 들어, 4바이트 값 0x12345678을 리틀 엔디안 방식으로 저장하면, 메모리에는 다음과 같이 저장됩니다:
      주소:    0x00  0x01  0x02  0x03
      값:      0x78  0x56  0x34  0x12
      
    • 즉, 최하위 바이트인 0x78이 먼저, 최상위 바이트인 0x12가 마지막에 저장됩니다.

2. 엔디안이 중요한 이유

  • 하드웨어의 차이: 서로 다른 시스템(예: x86 아키텍처와 ARM 아키텍처)은 서로 다른 엔디안 방식을 사용할 수 있습니다. 이로 인해 네트워크를 통한 데이터 전송이나 파일 형식 호환성에서 문제가 발생할 수 있습니다.
  • 데이터 호환성: 예를 들어, 네트워크에서 데이터를 전송할 때 엔디안 방식을 통일하여 전송해야 합니다. 이를 위해 **네트워크 바이트 오더(Network Byte Order)**라고 불리는 표준이 있으며, 이는 빅 엔디안 방식을 사용합니다.
  • 성능 최적화: 어떤 시스템에서는 엔디안 방식이 성능에 영향을 미칠 수 있습니다. 예를 들어, 리틀 엔디안을 사용하는 시스템에서는 데이터를 작은 바이트부터 처리하는 방식이 더 효율적일 수 있습니다.

3. 엔디안 변환 예시

  • 예를 들어, 4바이트 정수 0x12345678이 있을 때:
    • 빅 엔디안:
      메모리 주소 0x00 → 0x12
      메모리 주소 0x01 → 0x34
      메모리 주소 0x02 → 0x56
      메모리 주소 0x03 → 0x78
      
    • 리틀 엔디안:
      메모리 주소 0x00 → 0x78
      메모리 주소 0x01 → 0x56
      메모리 주소 0x02 → 0x34
      메모리 주소 0x03 → 0x12
      

4. 엔디안 확인 방법

  • C/C++ 코드 예시: 시스템의 엔디안 방식을 확인하는 간단한 방법은 다음과 같습니다:
    #include <stdio.h>
    int main() {
        unsigned int x = 0x12345678;
        char *c = (char*)&x;
        if (*c == 0x78)
            printf("리틀 엔디안 시스템입니다.\n");
        else
            printf("빅 엔디안 시스템입니다.\n");
        return 0;
    }
    
  • 이 코드는 0x12345678 값을 메모리에 저장한 뒤, 가장 낮은 주소에 저장된 값이 무엇인지 확인하여 시스템의 엔디안을 판단합니다.

5. 엔디안 사용 예시

  • 네트워크 프로그래밍: 네트워크 프로토콜은 보통 빅 엔디안을 사용합니다. 예를 들어, 인터넷 프로토콜(IP)이나 전송 제어 프로토콜(TCP) 등에서 데이터를 전송할 때 엔디안을 변환하여 맞추는 작업을 해야 할 때가 있습니다.
  • 파일 시스템: 여러 시스템 간에 파일을 주고받을 때, 파일 내의 데이터가 서로 다른 엔디안 방식으로 저장되어 있을 수 있어 변환 작업이 필요합니다.

6. 결론

바이트 오더링(엔디안)은 시스템의 메모리와 데이터 전송에서 중요한 역할을 합니다. 빅 엔디안과 리틀 엔디안은 서로 다른 바이트 순서를 사용하므로, 서로 다른 시스템 간에 데이터를 주고받을 때 변환 작업이 필요할 수 있습니다.

728x90

'개발공부 > CS' 카테고리의 다른 글

[운영체제] 스레드란?  (0) 2025.02.16
[운영체제] 프로세스란?  (0) 2025.02.16
[자료구조] 트리(Tree)란?  (0) 2025.02.16
[자료구조] Linked List란?  (0) 2025.02.16
[자료구조] Linked List와 Array List 차이는?  (0) 2025.02.16