데이터 구조 정렬이 뭐야?
C++ 구조체를 학습하면서 알게 된 재밌는 지식이다. 간단하게나마 짚고 넘어가려 한다.
Data structure alignment. 구조체에서 데이터가 컴퓨터의 메모리에 접근하거나 배열되는 방법이다.
CPU는 자신의 하드웨어 성능을 위해 메모리를 조금 더 효율적으로 관리한다.
데이터는 이 효율적인 관리에 의해 메모리에 Naturally aligned 된다.
잘나가는 맛집이 특제 레시피를 가지고 있듯이 CPU란 녀석도 효율적인 관리를 위한 영업비밀이 있다.
그것은 바로 Data structure padding(구조체 패딩) 이다.
Data structure padding
메모리에 Naturally aligned 된 데이터 사이사이에 Data structure padding 이 존재한다. 물론 상황에 따라 다르긴 하니 예를 들어보자.
하나의 구조체에 세 타입의 변수가 존재한다고 보자.
short | int | double |
2 bytes | 4 bytes | 8 bytes |
자 CPU는 이 변수들을 메모리에 저장해야 하는데 과연 할당된 메모리는 몇 바이트가 나올까?
먼저 머리로 생각을 해보면
2 + 4 + 8 = 14 bytes
정답은 14 바이트 입니다~ 라고 생각할 수 있다.
하지만 틀렸다.

sizeof() 함수를 통해 값을 내보면 16 바이트가 나온다.
자 여기서 CPU의 영업비밀이 드러난다.
2 + (2) + 4 + 8 = 14 bytes + (2 bytes)
괄호가 의미하는 것이 바로 Data structure padding. 구조체 패딩이다.
이 패딩은 CPU가 효율적인 데이터 관리를 위해 구조체 요소들 사이나 구조체의 마지막 요소 이후에 배치한다.
이렇게 패딩이 들어간 상태를 proper alignment 된 상태라고 본다.
위키피디아를 슭! 훑어보면 보통은1 바이트, 2바이트 같이 작은 데이터들로 인해 삽입된다.
장치의 비트수 (32-bit, 64-bit) 와도 관련이 있다.
패딩이 들어가는지 안들어가는지 다양한 조건들이 있지만 다음번에 궁금한게 있다면 위키피디아를 참고하기로 한다.
이 패딩 값이 있는 공간을 잘 조절함으로써 최적화를 할 수 있다고 한다.
https://en.wikipedia.org/wiki/Data_structure_alignment#Definitions
Data structure alignment - Wikipedia
From Wikipedia, the free encyclopedia Jump to navigation Jump to search Way in which data is arranged and accessed in computer memory Data structure alignment is the way data is arranged and accessed in computer memory. It consists of three separate but re
en.wikipedia.org
아주 친절하게도 위키피디아에 다양한 정보들이 있다.
조금 복잡하지만 패딩수를 구하는 식도 있고 다양한 예제를 통해 패딩이 어떻게 적용되는지도 잘 나와있다.

'코딩 > C++' 카테고리의 다른 글
[C++] Mutex (1) | 2024.01.21 |
---|---|
[C++]getline, cin.ignore, string(백준 알고리즘 1330번) (0) | 2022.01.14 |