바이트 패딩(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 줄어들었습니다.
'게임 프로그래밍 > C++ 기초' 카테고리의 다른 글
메모리 단편화(Memory Fragmentation) (2) | 2020.03.09 |
---|---|
C++ 콘스트(const) (1) | 2020.03.09 |
C++ #define 매크로 상수, 매크로 함수 (0) | 2020.03.08 |
C++ 얕은복사(Shallow Copy) 깊은복사(Deep Copy) (2) | 2020.03.04 |
std::weak_ptr (0) | 2020.03.03 |