2014-10-04 106 views
1

在這個例子中類有多少內存分配給這個類的對象?

class example 
{ 
public: 
    int x; 
} 

的對象的對象將被分配的4個字節的存儲器。作爲一個int將需要4個字節。

多少內存將被分配到後面的類的對象 -

class node 
{ 
public: 
    int data; 
    node *prev, *next; 
}; 

的int將採取四個字節,但對於「下一個」和「下一頁」指針?這個類的對象的總大小呢?

+2

爲什麼不用'sizeof'找出? – 2014-10-04 15:27:18

+0

這個問題太廣泛了,因爲基本上,每個自然數都可以用作這個問題的答案。該標準沒有指定基元類型的大小。它依賴於實現。使用'sizeof'並瞭解填充。 – Shoe 2014-10-04 15:30:53

回答

1

對象的總大小是sizeof(int) + 2*sizeof(node*) +任何填充編譯器可能會成員之間增加的確切大小。使用sizeof(node)是唯一便攜和可靠的方式來找出。

-2

指針在x86系統上的大小爲4個字節,或在x64系統上的大小爲8個字節。

因此,您的總大小node是4 + 4 + 4或4 + 8 + 8,它是x86架構上的12個字節,或x64架構上的20個字節。

因爲填充,但是在x64體系結構上,該類的實際大小將爲24個字節,因爲x64體系結構需要8個字節的對齊方式。

正如奧利弗查爾斯沃思提到的,你也可以做std::cout << sizeof(node) << "\n";,它會告訴你等級節點

+3

在大多數x64編譯器中,int都是* not * 8字節。此外,這個答案不考慮填充。 – 2014-10-04 15:29:05

+0

編輯,謝謝澄清 – Creris 2014-10-04 15:31:41

+1

正確的答案是,它的實施依賴。嘗試猜測系統OP是無用的。 – Shoe 2014-10-04 15:32:39