C++面試題目
C++中的空類的內存佔用大小。
這道題目源自面試過程中,讓一個剛畢業的小夥談談對C++ Class的認識,小夥兒中間冒出一句:C++空類內存佔用為一個字節。我當時就樂了,因為覺得這個問題太偏了,如果既然他說了也就追問下具體原因,也不能說的很清楚。把這個問題拿出來分享下。
解決方案
C++的空類是指這個類不帶任何數據成員和方法,空類對象不使用任何空間,因為沒有任何隸屬對象的數據需要存儲,但在實際的編譯器實現中,會讓C++中空類會佔一個字節,這是為什麼呢?
C++不允許一個對象(當然包括類對象)的大小為0,因為在分配對象內存時候,無法分配一個大小為0的內存的空間; 不同對象必須有獨一無二的的地址,所以編譯器會給空類隱含的增加一個字節讓對象的實例能夠相互區別。
空類做為基類的情況
雖然空類會被額外的被增加一個字節,但是這個字節並不會追加到子類中。
sizeof(D)=4
空類作為數據成員的情況
在大多數編譯器中sizeof(HoldsAnInt) =8,雖然Empty類的大小雖然為1,然而由於內存對齊的原因,會把這個類對象擴展為8個字節。
閱讀更多 半杯茶的小酒杯 的文章