歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++空白基類最優化(EBO或EBCO)

C++空白基類最優化(EBO或EBCO)

日期:2017/3/1 9:59:47   编辑:Linux編程
對於C++中的一個空類

class X
{
};

事實上並不是空的,sizeof(X)並不等於0, 一般的結果是1。每個X的對象都有一個隱晦的1 bytes,是被編譯器安插進去的一個char,這樣可以使得這個class的兩個objects在內存中配置獨一無二的地址。

當X作為另一個類的成員時,如:

class A
{
public:
X x;
int a;
};

由於X占一個字節,int占4個字節,再加上編譯器的alignment調整,sizeof(Y) = 8。

但是當一個類繼承X時:

class Y : public X
{
public:
int a;
};

這時大部分編譯器對於sizeof(Y)的結果是4,而不是8。這就是所謂的空白基類最優化在(empty base optimization-EBO 或 empty base class opimization-EBCO)。在空基類被繼承後由於沒有任何數據成員,所以子類優化掉基類所占的1 byte。EBO並不是c++標准所規定必須的,但是大部分編譯器都會這麼做。
Copyright © Linux教程網 All Rights Reserved