空基優化
即使型別為空 class
型別(即,沒有非靜態資料成員的 class
或 struct
),任何物件或成員子物件的大小必須至少為 1,以便能夠保證相同型別的不同物件的地址始終是不同的。
但是,基礎 class
子物件不是那麼受約束,可以從物件佈局中完全優化:
#include <cassert>
struct Base {}; // empty class
struct Derived1 : Base {
int i;
};
int main() {
// the size of any object of empty class type is at least 1
assert(sizeof(Base) == 1);
// empty base optimization applies
assert(sizeof(Derived1) == sizeof(int));
}
空基本優化通常由分配器感知標準庫類(std::vector
,std::function
,std::shared_ptr
等)使用,以避免在分配器無狀態時佔用其分配器成員的任何額外儲存。這是通過儲存一個所需的資料成員(例如 begin
,end
或 capacity
指標)來實現的。
參考: cppreference