【C】sizeof(空結構體/空類)的大小
阿新 • • 發佈:2019-02-17
sizeof(空類/空結構體) = 1;
#include <iostream> using namespace std; // 空類 class ClassA { }; // 繼承空類的空類 class ClassB : public ClassA { }; // 空結構體 struct StructC { }; // 主函式 int main() { cout<<"A: "<<sizeof(ClassA)<<endl; cout<<"B: "<<sizeof(ClassB)<<endl; cout<<"C: "<<sizeof(StructC)<<endl; return 0; }
測試結果:
空類,沒有任何成員變數或函式,即沒有儲存任何內容;
但是由於空類仍然可以例項化,編譯器就需給它分配記憶體空間,來指示類例項的地址。
這裡編譯器預設分配了一個位元組(如:char),以便標記可能初始化的類例項,同時使空類佔用的空間也最少(即1位元組)。
深度探索c++物件模型中是這樣說的: 那是被編譯器插進去的一個char ,使得這個class的不同實體(object)在記憶體中配置獨一無二的地址。 也就是說這個char是用來標識類的不同物件的。