struct Temp
{
	short a; // 2byte
	char b; // 1byte
	short c; // 2byte
	char d; // 1byte
	int e; // 4byte
	char f; // 1byte
};

 

위 구조체의 크기는 변수 크기를 모두 더한 11 바이트일 것 같지만 실제로는 16 바이트

word 단위의 크기에 맞추지 못할 경우 패딩 바이트가 할당됨

 

패딩 바이트를 사용하는 이유

워드 단위로 메모리를 정렬하여 CPU가 데이터를 더 빠르게 읽고 쓸 수 있음

  • 단일 메모리 액세스 연산으로 데이터를 온전히 읽거나 쓸 수 있음
    정렬되지 않은 데이터는 여러 메모리 액세스가 필요할 수 있기 때문
  • CPU와 메모리 간의 데이터 전송은 워드 단위로 최적화되어 있음
  • CPU는 캐시 라인 단위로 데이터를 처리하는데, 정렬되지 않은 데이터는 캐시 라인 경계를 넘을 수 있어 성능이 저하됨

 

활용 방법

선언된 순서대로 패딩 바이트 추가를 진행하므로 메모리 낭비를 위해 동일한 크기의 변수들을 묶어 선언하는 것이 좋음

struct Temp // 해당 구조체는 12 바이트
{
	short a;
	short c;
	char b;
	char d;
	char f;
	int e;
};

 

'C++' 카테고리의 다른 글

c++ volatile  (1) 2024.12.03
C++ 람다  (1) 2024.11.15
C++ optional  (0) 2024.09.29
C++ std::bitset  (1) 2024.09.25
C++ std::function  (0) 2024.09.23

+ Recent posts

목차