바이트 패딩이란 사용자 정의 자료형 내부의 가장 큰 바이트를
기준으로 바이트 크기를 정하는 것을 말한다.
class Test
{
public:
int* a;
int t;
char b;
char b1;
int c;
};
위와 같이 클래스가 있다면 int*의 8바이트를 기준으로
크기가 정해지는 것이다.
int* a의 8바이트
int t와 char 2개 총 6바이트
int c의 4바이트를 더하면 총 10바이트,8바이트를 넘어가기 때문에
새롭게 8바이트를 가져온다. 그래서 총 24바이트의 크기를 갖는다.
그렇다면 실제 주소값은 어떻게 계산될까?
int main()
{
Test NewTest;
std::cout << (__int64)&NewTest.a << std::endl;
std::cout << (__int64)&NewTest.t << std::endl;
std::cout << (__int64)&NewTest.b << std::endl;
std::cout << (__int64)&NewTest.b1 << std::endl;
std::cout << (__int64)&NewTest.c << std::endl;
}
위의 코드를 실행해 보면 예를들어 (64비트)
955906568
955906576 -> 8증가
955906580 -> 4증가
955906581 -> 1증가
955906584 -> 3증가
이렇게 나온다고 가정하면
68 69 70 71 72 73 74 75
int* a | int* a | int* a | int* a | int* a | int* a | int* a | int* a |
76 77 78 79 80 81 82 83
int t | int t | int t | int t | char b | char b1 | padding | padding |
84
int c | int c | int c | int c | padding | padding | padding | padding |
위와 같이 생각 할 수 있다 !
'공부하기' 카테고리의 다른 글
결합도, 응집도 (0) | 2021.01.15 |
---|---|
MoveToEx함수,LineTo 함수 (0) | 2021.01.14 |
SOLID 원칙(객체지향 디자인의 5원칙) (0) | 2021.01.14 |
vector와 list (0) | 2021.01.06 |
컨테이너(container) (0) | 2020.12.22 |