C++

C++ Struct 구조체 Padding

Muru 2023. 12. 20. 11:30
#include <iostream>

using namespace std;

//구조체 struct
struct Employee		// 2 + (2) + 4 + 8 = 16 // padding
{
	short id;		//2bytes;
	int age;		//4bytes;
	double wage;		//8bytes;

};

int main()
{
	Employee emp1;
	cout << sizeof(Employee) << endl;

	return 0;
}

 

short, int, double의 사이즈가 16인 이유가뭘까?

구조체의 Padding 때문이다.

 

C++에서는 메모리 접근 속도를 최적화 하기 위해 구조체의 각 멤버가 특정 메모리정렬(alignment)경계에 맞춰 배치되고, 이 과정에서 구조체 멤버 사이에 추가적인 미사용 메모리 공간이 삽입된다고 한다.

 

short id : 2

int age : 4

double age : 8

 

int와 double은 4바이트 또는 8바이트 경계에 맞춰 정렬된다.

 

여기서 4바이트 경계에 맞추는 이유는 프로세서가 데이터에 효율적으로 접근하기 위한 메모리 정렬(Memory Alignment)관행 때문에 메모리에 데이터를 읽고 쓰는데 있어 효율성을 증가시킵니다.

 

메모리 정렬을 함으로 데이터가 자신의 크기에 맞춰 정렬되게 해 한번의 메모리 접근으로 필요한 데이터를 읽어오므로 속도가 향상된다.

 

물론, 메모리 공간을 더 사용하겠지만, 프로세스가 메모리에서 데이터를 읽고 쓰는 데 시간을 줄여 전체적인 프로그램 성능을 향상시키고 있습니다.