바이트 패딩(Byte Padding)

클래스(구조체)에  패딩 바이트를 추가하여 CPU 접근을 더 용이하게 해주는 기법

코드

#include "pch.h"
#include <iostream>

class TestClass
{
	char m_Temp_Char[2];
	int m_Temp_Int;
	short m_Temp_Short1;
	short m_Temp_Short2;
	short m_Temp_Short3;
};

int main()
{
	TestClass TempTestClass;
	int Size_1 = sizeof(TempTestClass);
	std::cout << Size_1 << std::endl;
}

TestClass의 크기는?

1. char m_ char m_Temp_Char[2];  
2. int m_Temp_Int;
3. short m_Temp_Short1;
4. short m_Temp_Short2;
5. short m_Temp_Short3;

1 = 2byte
2 = 4byte
3 = 2byte
4 = 2byte
5 = 2byte

2 + 4 + 2 + 2 + 2 = 12byte라고 생각할 수 도 있다.

하지만 답은 

바이트 패딩이란 한번 연산에 하나의 값이 들어가게끔 패딩 바이트를 추가해주는건데.

1. char m_ char m_Temp_Char[2];  
2. int m_Temp_Int; 
3. short m_Temp_Short1; 
4. short m_Temp_Short2; 
5. short m_Temp_Short3;

제일 큰 단위인 int의 크기를 따라가게된다

크기가 12바이트 라고 생각했을때의 메모리 구조는

바이트 패딩이 일어난 TestClass의 메모리구조는 아래와 같이 구성됩니다.

가장 큰 크기인 int형 4바이트 크기에 맞춰 위와 같이 패딩 바이트를 추가하여 메모리는 더 사용하나 속도는 빨라집니다.

바이트 패딩을 고려한 구조

#include "pch.h"
#include <iostream>

class TestClass
{
	char m_Temp_Char[2];
    	short m_Temp_Short1;
	short m_Temp_Short2;
	short m_Temp_Short3;
	int m_Temp_Int;
};

int main()
{
	TestClass TempTestClass;
	int Size_1 = sizeof(TempTestClass);
	std::cout << Size_1 << std::endl;
}

1. char m_ char m_Temp_Char[2];  
2. short m_Temp_Short1; 
3. short m_Temp_Short2; 
4. short m_Temp_Short3;
5. int m_Temp_Int; 


1 = 2byte
2 = 2byte
3 = 2byte
4 = 2byte
5 = 4byte

4byte씩 딱 떨어지기에 Class의 크기는 12byte로 4byte 줄어들었습니다.

 

 

+ Recent posts