Q) 바이트 패딩이 무엇일까요
A) 구조체, 클래스에 패딩 바이트를 추가하여 CPU가 메모리 공간에 접근 하기 쉽게 만들어줍니다. 이는 메모리 낭비는 일어날 수 있지만 그보다 메모리의 크기를 맞춰서, CPU의 연산 횟수를 줄여주는 큰 장점이 있습니다.
Q) 어떻게 작동하나요
A) CPU 레지스터가 한 번에 읽을 수 있는 크기의 파일로 만들어줍니다.
32bit OS - 4byte
64bit OS - 8byte 기준이지만
바이트 패딩으로 한 결과는 또 색다릅니다.
32bit 기준
struct A {
char a; // 1byte
bool b; // 1byte
int c; // 4byte
}
이런식으로 4byte씩 끊어서 메모리공간에 저장해줍니다.
A 구조체의 size는 총 8byte가 됩니다.
또 다른 예시로는
struct A {
long long a; // 8byte
bool b; // 1byte
};
이런 경우에는 12byte가 들어가는게 아닌, 8 + 8 byte로 16byte의 크기를 가진 구조체가 되더라구요.
즉 가장 큰 멤버 변수의 사이즈을 기준으로 byte padding을 하게 됩니다.