2015-07-21 36 views
7

我知道,這C++類的一個實例:如何類屬性/字段存儲

class A { 
    char c; 
    int iiii; 
    short ss; 
}; 

看起來有點像這樣的記憶:c| | | |i|i|i|i|s|s| | |

這4/2的信註解有沒有感覺(但我認爲,我的觀點是明確的)

1 byte for char3 bytes of padding4 bytes of int2 bytes for the short,和2 bytes of tail padding(依賴於平臺的,但它不會改變邏輯)

從C++標準(編譯器不會改變在我的例子中的字段的順序):的

非靜態數據成員分配一個具有相同訪問控制(第11條)的(非聯合)類,以便後面的成員在類對象中具有更高的 地址。未指定具有不同訪問控制的非靜態 數據成員的分配順序(第11章)。 執行對齊需求可能會導致兩個相鄰成員 不會立即被分配;所以虛擬基礎類(10.1)管理虛擬功能(10.3)和 的空間需求可能會是 。

所以,我想知道它是否與Java類相同,編譯器是否可以更改順序來減少填充?

+0

一些類似的問題:http://stackoverflow.com/questions/16456366/why-does-the-size-of-a-class相反,屬性在內存中按以下順序組織-de-order-of-the-member-declaration-and http://stackoverflow.com/questions/2006504/c-data-alignment-member-order-inheritance –

+1

JVM規範指出[* Successive項目按順序存儲在類文件中,無需填充或對齊*](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html)。 – Turing85

+1

@NO_NAME我不知道你有什麼相似的意思,但這不是類似的意思。你讀過我的問題了嗎? –

回答

相關問題