我知道,這C++類的一個實例:如何類屬性/字段存儲
class A {
char c;
int iiii;
short ss;
};
看起來有點像這樣的記憶:c| | | |i|i|i|i|s|s| | |
這4/2的信註解有沒有感覺(但我認爲,我的觀點是明確的)
1 byte for char
,3 bytes of padding
,4 bytes of int
, 2 bytes for the short
,和2 bytes of tail padding
(依賴於平臺的,但它不會改變邏輯)
從C++標準(編譯器不會改變在我的例子中的字段的順序):的
非靜態數據成員分配一個具有相同訪問控制(第11條)的(非聯合)類,以便後面的成員在類對象中具有更高的 地址。未指定具有不同訪問控制的非靜態 數據成員的分配順序(第11章)。 執行對齊需求可能會導致兩個相鄰成員 不會立即被分配;所以虛擬基礎類(10.1)管理虛擬功能(10.3)和 的空間需求可能會是 。
所以,我想知道它是否與Java類相同,編譯器是否可以更改順序來減少填充?
一些類似的問題: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 –
JVM規範指出[* Successive項目按順序存儲在類文件中,無需填充或對齊*](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html)。 – Turing85
@NO_NAME我不知道你有什麼相似的意思,但這不是類似的意思。你讀過我的問題了嗎? –