https://younggwan.tistory.com/41

 

C++ 바이트 패딩(Byte Padding)

바이트 패딩(Byte Padding) 클래스(구조체)에 패딩 바이트를 추가하여 CPU 접근을 더 용이하게 해주는 기법 코드 #include "pch.h" #include class TestClass { char m_Temp_Char[2]; int m_Temp_Int;..

younggwan.tistory.com

전에 바이트 패딩에 정리한적이있다.

가장큰 자료형의 크기로 바이트패딩이 된다고 말했었는데

좀더 정보를 추가하기 위해 2번째 글이다!.

일단 코드를 보자

class A
{
public:
	char m_c1; // 1
	char m_c2; // 1
	int  m_i1; // 4
	char m_c3; // 1
	int m_i2; // 4
	char m_c4; // 1

	virtual void Func()
	{

	}
};


int main()
{
	A a;
	a.m_c1 = 1;
	a.m_c2 = 2;
	a.m_i1 = 11;
	a.m_c3 = 3;
	a.m_i2 = 22;
	a.m_c4 = 4;
	A* a_p = &a;
	size_t tempsize = sizeof(A);
	return 0;
}

x64 환경에서 A의 크기는 

가상 함수 포인터가 멤버 변수로 생기기에 8바이트로 패딩이 이루어 질거라고 예상을 하고
char, char, int, char, int, char 의 멤버 변수를 가지고있기에
1, 1, 4, 1, 4, 1
8(__vfptr) + 8(1,1,4,1), + 8(4,1) = 24의 사이즈가 나올거라고 예상을 했다.
하지만 사이즈가!

32바이트가 나왔다..

그래서! 메모리로 확인을 해보았다.

30 9c 99 28 f7 7f 00 00   01 02 cc cc 0b 00 00 00   03 cc cc cc 16 00 00 00   04 cc cc cc cc cc cc cc

----------------------------------------------------

__vfptr(30 9c 99 28 f7 7f 00 00) 

----------------------------------------------------
m_c1(01)
m_c2(02)
cc
cc
m_i1(0b 00 00 00)

----------------------------------------------------

m_c3(03)
cc
cc
cc
m_i2(16 00 00 00)

----------------------------------------------------

m_c4(04)
cc
cc
cc
cc
cc
cc
cc

----------------------------------------------------

이렇게 메모리가 자리잡았다.

24바이트 크기안에 다넣을수있는데 왜 32바이트가 되었을까

바이트패딩은 이전의 데이터의 타입으로 바이트 패딩 규칙을 만든다고한다.

현재 가상 함수 포인터로 인하여 8바이트의 크기로 패딩이 되고있는데

char, char, int , char가 8바이트에 들어간게아니라

char 7바이트 남았네 또 char가 들어올수있네!
char 6바이트 남았네 또 char가 들어올수있네!
int   2바이트 남았네 또 int가 들어올수없네! 하나더!!!

char 7바이트 남았네 또 char가 들어올수있네!
int   3바이트 남았네 또 int가 들어올수없네! 하나더!!!!!!!!!!!

char 7바이트 남았네! 

이런식으로 크기가 32바이트가 되었다고한다..

공부하다가 당연히 24라고 생각했었는데 32였다 하하하하하하....

역시 코딩은 의심에 의심에 의심에 의심을 해야겠다.

언제나 틀린정보는 지적해주시면 감사하겠습니다!. 꼭.. 잡아주세요 

'게임 프로그래밍 > C++ 기초' 카테고리의 다른 글

C++ goto (고투)  (2) 2020.05.14
C++ void* 보이드 포인터  (0) 2020.05.11
C++ 함수 포인터  (0) 2020.05.05
C++ 가변 인자 템플릿  (0) 2020.05.05
C++ 가변인자  (1) 2020.05.03

+ Recent posts