C EBO 空基類最優化

2021-08-04 06:30:29 字數 863 閱讀 9777

ebo全稱empty base optimization

最近看effectivec++ 條款39,這個名詞讓我很陌生,學過之後發現也不是什麼新鮮玩意了。

empty base optimization,空基類最優化,說到什麼是ebo,要先從一道面試題說起:

class a

{};cout

;cout

<如果繼承空類,那麼將不會發生上述情況:

class b : private a

cout

<

class empty

;//enum

void hello(){}//non-virtual 函式

static

int xx;//static 成員變數

};//sizeof(empty) == 1;

//依然認為它是乙個empty class

當我們的派生類需要包含基類的這些內容時,使用ebo將大大減小記憶體使用。

比如private繼承乙個empty class將會繼承該類中的實現,在derived class中可以藉由這些實現來構造新的介面和實現:

class empty

;//enum

void hello()//non-virtual 函式

static

int xx;//static 成員變數

};class holdanint : private empty

private:

int x;

};int main()

effective c++ 條款39

c 空基類優化

我們知道c 中乙個空類的大小為1個位元組,那麼如果乙個空類作為基類或者成員物件的時候會怎樣呢,是不是還是一定占用1個位元組呢?c 中為保證同一型別的不同物件位址始終有別,要求任何物件或成員子物件,即使該型別是空的類型別 即沒有非靜態資料成員的 class 或 struct 也是如此。然而,基類子物件...

C 空類,空虛基類處理及類大小

對於乙個空類,編譯器會加入1byte的大小,使得這乙個類的兩個物件在記憶體中有獨一無二的位址。如下 class x class y public virtual x class z public virtual x class a public y,public z 每個類的大小 傳統編譯器對emp...

模板與繼承之藝術 空基類優化

1 概念 c 中有 空 類的概念,這就意味著在執行期間其內部不好任何記憶體。只包含型別的成員函式 非虛成員函式和靜態資料成員的類為空類。非靜態的資料成員,虛函式和虛基類則在執行時期消耗儲存空間。2 空基類優化如下 include using namespace std class empty cla...