«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
03-29 17:28
관리 메뉴

lancelot.com

EBCO(Empty Base Class Optimization) 본문

프로그래밍

EBCO(Empty Base Class Optimization)

lancelot50 2022. 7. 18. 09:33

Empty class는 member를 가지지 않지만, Empty class의 sizeof(empty)는 1byte 이다.

그래서 empty class를 member로 가지면, size를 가지게되는데, 대신에 empty class에서 상속을 받으면, 메모리 구조는 같지만 size는 0이 된다.

ex1)

#include<iostream>

class Empty {};

struct Data1
{
	Empty e;
	int data;
};

struct Data2 : public Empty
{
	int data;
};

int main()
{
	std::cout << sizeof(Data1) << std::endl;
	std::cout << sizeof(Data2) << std::endl;
}

ex2) empty class 와 template partial specialization을 이용.

#include<iostream>

class Empty {};

template<typename T1, typename T2, bool = std::is_empty_v<T1>>
struct PAIR
{
};

template<typename T1, typename T2>
struct PAIR<T1, T2, false>
{
	T1 first;
	T2 second;
};

template<typename T1, typename T2>
struct PAIR<T1, T2, true> : public T1
{
	T2 second;
};


int main()
{
	PAIR<int, int> p1;
	PAIR<Empty, int> p2;

	std::cout << sizeof(p1) << std::endl;
	std::cout << sizeof(p2) << std::endl;
}