1. 패딩

  • 메모리 -> CPU로 읽을 때 CPU가 읽기 쉽게 하기 위하여 마련한 여유 공간
  • 프로그램 혹은 운영체제가 32bit인지 64bit인지에 따라 4byte, 8byte씩 끊어 읽기 때문에 이 과정의 효율을 위함
struct Padding
{
char a;
long long b;
};

Padding P;
sizeof(P);  //32bit, 64bit 둘 다 16
  • 위 P의 결과가 32bit, 64bit에서 둘다 16이 나온 것이 Padding이 적용된 것
  • char = 1byte, long long = 8byte
  • 둘을 더하면 9byte의 결과가 나와야 하지만 CPU가 읽기 편하기 위해 여유공간을 준 것
  • 32bit나 64bit의 빌드 결과가 둘 다 16인 것으로 보아 운영체제가 몇 bit의 운영체제인지가 구조체의 크기에 영향을 준 것으로 보임

 

2. 공용체(Union)

  • 구조체와 마찬가지로 여러 타입의 데이터를 묶어서 관리 가능
  • 차이점은 구조체는 여러 데이터마다 각각의 값을 동시에 가질 수 있으나
  • 공용체는 한 순간에 하나의 값 밖에 가지지 못함 -> 덮어쓰는 방식이기 때문에 size가 큰 변수를 먼저 정의 후 size가 작은 변수의 값을 변경하게 되면 실제 값이 오염되어 있을 수 있음
  • 제일 큰 변수의 크기가 공용체의 크기가 됨
using namespace std;

union MyUnion
{
	struct
	{
		int a, b;
	};

	int c[2];
};

MyUnion U;

U.a = 10;
U.b = 20;

cout << U.a << endl;	//10
cout << U.b << endl;	//20
cout << U.c[0] << endl;	//10
cout << U.c[1] << endl;	//20
cout << sizeof(U) << endl;	//8
  • 위 코드는 익명 구조체와 배열의 크기가 같은 것을 이용하여 구조체의 멤버로 접근하거나 배열의 인덱스로 접근하거나 차이가 없음을 볼 수 있음
  • 공용체를 다룸에 있어 비트 단위로 어떤 값이 들어가 있을 지 잘 고민해보아야 함, 혹은 0으로 초기화 후 다시 값을 세팅하는 방식을 사용하는 것이 좋아 보임

'C++ > 키워드 정리' 카테고리의 다른 글

키워드 정리 [6] - 함수 호출 규약  (0) 2023.12.01
키워드 정리 [5] - 동적 할당  (1) 2023.12.01
키워드 정리 [3] - 매크로  (1) 2023.12.01
키워드 정리 [2] - const  (1) 2023.12.01
키워드 정리 [1] - 변수  (0) 2023.12.01

+ Recent posts