프로그래밍/공부
[C++] 바이트 패딩
Sik.K
2023. 4. 20. 15:49
바이트 패딩(Byte Padding)
클래스 혹은 구조체에 바이트를 추가해 CPU에 가해지는 부하를 줄여주는 기법. CPU는 연산을 할 때 레지스터에 데이터를 담아서 연산을 한다. 이 레지스터는 x86 CPU에서는 32비트, x64 CPU에서는 64비트로 이뤄져 있는데 이 크기를 바이트로 환산하면 각각 4바이트 8바이트가 된다.
만약 다음과 같은 클래스가 있다고 가정해보자.
class Basic
{
int a;
bool b;
int c;
}
위 클래스의 메모리 구조는 int bool int의 연속된 공간이다.
구조는 대략 위와 같다.
이 클래스를 컴퓨터가 읽어올 때, 레지스터에 담게 될 경우, 32비트 코어에서는 4바이트 씩 끊어서 읽게 된다. 이 경우 첫 번째 int 변수를 읽을 때는 문제가 없지만 다음 변수를 읽을 때 문제가 생긴다.
bool형의 크기는 1바이트로 되어 있다. 이 때문에 이 변수를 읽기 위해 레지스터의 공간에 할당하게 되면 뒤에 위치한 int의 데이터의 일부가 같이 읽히게 된다.
따라서 세 번째 위치한 int의 데이터를 완전히 읽기 위해서 데이터를 2번을 읽어야 하는 불상사가 생기게 된다. 이 때문에 메모리를 읽는 횟수가 증가하게 되고 연산의 속도가 느려진다.
이런 상황을 방지하기 위해 bool형 자료 뒤에 필요없는 공간 3바이트를 채워줌으로 써 마지막 int 자료형을 읽을 때 한 번에 자료를 읽게 할 수 있다.
이렇게 붉은 공간처럼 빈 공간을 만들어 줌으로 써 CPU의 가해지는 부하를 줄여줄 수 있다.