揭示空類物件的大小
確定屬於空類別的物件的大小可能看起來像是微不足道的查詢,但它隱藏了有趣的複雜性。
在 C 中,空類別本質上是佔位符,不含任何資料成員或方法。傳統觀點可能認為這樣的物件不應該佔用任何記憶體空間。然而,事實並非如此。
謎題:零或非零大小?
乍一看,期望一個空類別物件似乎是合理的大小為 0 位元組。畢竟,它不包含有形資訊。然而,嘗試引用或指派一個空類別物件的指標表示它必須具有非零大小。
揭示實驗
透過執行一個簡單的程式來建立一個空類別物件並輸出其大小,很明顯該物件的大小確實為 1 位元組。這種行為在各種編譯器中都是一致的,包括 Visual C 和 Cygwin-g。
1 位元組 Enigma 的奇怪案例
最初的驚喜源自於預期空類物件所佔用的大小等於機器字(通常為 32 或 64 位元)。但是,出於對齊考慮,1 位元組大小分配是合理的。
由於空類物件不包含實際數據,因此其對齊無關緊要。這使得編譯器能夠為物件分配單一位元組,即使底層架構需要對非空物件進行更大的對齊。
為什麼不是零位元組?
雖然空類物件沒有相關數據,但它仍然必須擁有唯一的位址。這種必要性源自於以下基本規則:不同的物件必須有不同的位址。如果一個空類別物件的大小為 0 位元組,則多個物件可能會佔用相同的位址,這將違反此原則。
結論
看似微不足道的任務確定空類對象的大小的方法揭示了 C 語言固有的細微差別。儘管不包含明確數據,但空類別物件需要非零大小以確保唯一位址並符合對齊約束。
以上是為什麼空的 C 類別物件的大小為 1 位元組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!