struct Temp
{
short a; // 2byte
char b; // 1byte
short c; // 2byte
char d; // 1byte
int e; // 4byte
char f; // 1byte
};
위 구조체의 크기는 변수 크기를 모두 더한 11 바이트일 것 같지만 실제로는 16 바이트
word 단위의 크기에 맞추지 못할 경우 패딩 바이트가 할당됨
패딩 바이트를 사용하는 이유
워드 단위로 메모리를 정렬하여 CPU가 데이터를 더 빠르게 읽고 쓸 수 있음
- 단일 메모리 액세스 연산으로 데이터를 온전히 읽거나 쓸 수 있음
정렬되지 않은 데이터는 여러 메모리 액세스가 필요할 수 있기 때문 - CPU와 메모리 간의 데이터 전송은 워드 단위로 최적화되어 있음
- CPU는 캐시 라인 단위로 데이터를 처리하는데, 정렬되지 않은 데이터는 캐시 라인 경계를 넘을 수 있어 성능이 저하됨
활용 방법
선언된 순서대로 패딩 바이트 추가를 진행하므로 메모리 낭비를 위해 동일한 크기의 변수들을 묶어 선언하는 것이 좋음
struct Temp // 해당 구조체는 12 바이트
{
short a;
short c;
char b;
char d;
char f;
int e;
};
'C++' 카테고리의 다른 글
c++ volatile (1) | 2024.12.03 |
---|---|
C++ 람다 (1) | 2024.11.15 |
C++ optional (0) | 2024.09.29 |
C++ std::bitset (1) | 2024.09.25 |
C++ std::function (0) | 2024.09.23 |