공부하기

바이트패딩 구조

Nin 2020. 12. 22. 17:32

바이트 패딩이란 사용자 정의 자료형 내부의 가장 큰 바이트를

기준으로 바이트 크기를 정하는 것을 말한다.

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