CS(Computer Science)

메모리 정렬과 패딩

MozarTnT 2024. 12. 5. 17:48
728x90
반응형

 

 

 

 

 

메모리 정렬(Memory Alignment) 이란?

 

  • 메모리 정렬은 컴퓨터가 데이터를 효과적으로 저장하고 여기에 접근하는 방식을 뜻한다.
  • 데이터가 CPU에 저장될 때 컴퓨터가 더 빠르게 접근할 수 있도록 메모리 주소를 특정 기준에 따라 배치한다.
  • 핵심 키워드로는 정렬, 구조체 정렬, 패딩 등이 있다.

 

 

 

기본 정렬 규칙

 

  • 데이터 타입의 크기에 따라 메모리 주소가 정렬된다.
  • 데이터의 시작 주소는 해당 데이터 크기의 배수여야 한다.
    • ex) int의 경우는 4바이트 이기 때문에 4의 배수의 주소에 정렬되어야 한다.(0,4,8,12...)
    • ex) double의 경우는 8바이트 이기 때문에 8의 배수의 주소에 정렬되어야 한다.(0,8,16,32...)
  • 구조체 내에서의 각 멤버들은 자신의 데이터 크기에 맞게 정렬된다.
  • 구조체 전체의 크기는 각 멤버 중 가장 큰 멤버 크기의 배수로 결정된다. (구조체 정렬)

 

 

 

패딩(Padding)이란?

 

  • 데이터를 위와 같이 정렬 규칙에 따라 배치하다 보면 각 데이터 간에 남는 공간에 빈 바이트를 임의로 배치하는데 이를 패딩이라고 한다.
  • 패딩을 통해서 메모리에 접근하는 속도가 향상되지만 패딩의 횟수가 잦아질수록 메모리 공간 낭비가 발생한다.

 

 

struct Example 
{
    char a;    // 1바이트
    int b;     // 4바이트
    char c;    // 1바이트
};

 

 

 

위 구조체의 경우에는 각각 1바이트, 4바이트, 1바이트 크기에 해당하는 멤버들을 가지고 있다.

 

 

1. char a의 경우는 1바이트이고 0번째 주소지에 저장된다.

 

2. 이후 int는 4바이트의 크기이기 때문에 4의 배수 주소에 정렬되어야 한다, 따라서 a와 b 사이에 3바이트의 패딩을 추가하고 

4번째 부터 7번째 주소지에 위치한다.

 

3. 마지막으로 c는 1바이트 크기이기 때문에 b가 위치한 4바이트를 지나 8번째 주소지에 위치한다.

 

4. 이후 전체 구조체의 크기는 제일 큰 멤버인 int의 배수로 유지되어야 하기 때문에 3칸을 패딩해 준다.

 

 

 

 

정렬이 완료된 각 멤버의 위치는 다음과 같다.

 

 

 

 

만약 멤버를 효율적으로 배치했다면?

 

 

  • 패딩은 데이터 정렬 후 메모리 접근 속도를 올려주는 중요한 역할을 수행한다.
  • 하지만 메모리 효율성을 위해 최대한 적은 패딩이 이루어지게 멤버를 배치하는 것이 좋다.
  • 헷갈린다면 가장 큰 멤버부터 순서대로 배치하면 패딩의 횟수를 줄일 수 있다.

 

 

struct Example 
{
    int b;    // 4바이트
    char a;   // 1바이트
    char c;   // 1바이트
};

 

 

위 구조체의 경우 크기가 큰 순서대로 기존의 구조체를 재 배열했다.

 

 

1. 먼저 int b의 경우 4바이트이고 0번지부터 3번지까지 위치하게 된다.

 

2. char a의 경우는 1바이트이고 int b 뒤에 4번지에 위치하게 된다.

 

3. char c의 경우도 1바이트이고 char a 뒤에 5번지에 위치한다.

 

4. 이후 구조체 전체의 크기를 4의 배수로 유지하기 위해 c 뒤에 2바이트를 패딩해준다.

 

 

 

정렬이 완료된 각 멤버의 위치는 다음과 같다.

 

 

정리

 

  • 메모리 정렬은 CPU가 데이터를 효율적으로 읽을 수 있도록 데이터를 특정 크기 단위로 정렬하는 방식이다.
  • 각 데이터 타입은 고유의 정렬 요구사항을 가지며, 보통 1바이트, 2바이트, 4바이트, 8바이트 크기 단위로 정렬되어야 한다.
  • 패딩은 데이터가 정렬 규칙을 맞추기 위해 메모리 내에 빈 공간을 추가하는 과정이다.
  • 정렬되지 않은 데이터는 여러 번 메모리 접근을 하게 되어 성능이 저하될 수 있다.

 

 

 

 

 

 

 

 

사진 출처 : https://www.accu.org/journals/overload/31/174/floyd/

728x90
반응형