«   2022/10   »
            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
2
Total
276,908
10-07 04:04
관리 메뉴

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;
}
0 Comments
댓글쓰기 폼