首頁 >後端開發 >C++ >為什麼空的 C 類別物件的大小為 1 位元組?

為什麼空的 C 類別物件的大小為 1 位元組?

DDD
DDD原創
2024-12-21 13:32:09958瀏覽

Why Does an Empty C   Class Object Have a Size of 1 Byte?

揭示空類物件的大小

確定屬於空類別的物件的大小可能看起來像是微不足道的查詢,但它隱藏了有趣的複雜性。

在 C 中,空類別本質上是佔位符,不含任何資料成員或方法。傳統觀點可能認為這樣的物件不應該佔用任何記憶體空間。然而,事實並非如此。

謎題:零或非零大小?

乍一看,期望一個空類別物件似乎是合理的大小為 0 位元組。畢竟,它不包含有形資訊。然而,嘗試引用或指派一個空類別物件的指標表示它必須具有非零大小。

揭示實驗

透過執行一個簡單的程式來建立一個空類別物件並輸出其大小,很明顯該物件的大小確實為 1 位元組。這種行為在各種編譯器中都是一致的,包括 Visual C 和 Cygwin-g。

1 位元組 Enigma 的奇怪案例

最初的驚喜源自於預期空類物件所佔用的大小等於機器字(通常為 32 或 64 位元)。但是,出於對齊考慮,1 位元組大小分配是合理的。

由於空類物件不包含實際數據,因此其對齊無關緊要。這使得編譯器能夠為物件分配單一位元組,即使底層架構需要對非空物件進行更大的對齊。

為什麼不是零位元組?

雖然空類物件沒有相關數據,但它仍然必須擁有唯一的位址。這種必要性源自於以下基本規則:不同的物件必須有不同的位址。如果一個空類別物件的大小為 0 位元組,則多個物件可能會佔用相同的位址,這將違反此原則。

結論

看似微不足道的任務確定空類對象的大小的方法揭示了 C 語言固有的細微差別。儘管不包含明確數據,但空類別物件需要非零大小以確保唯一位址並符合對齊約束。

以上是為什麼空的 C 類別物件的大小為 1 位元組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn