在這個例子中類有多少內存分配給這個類的對象?
class example
{
public:
int x;
}
的對象的對象將被分配的4個字節的存儲器。作爲一個int將需要4個字節。
多少內存將被分配到後面的類的對象 -
class node
{
public:
int data;
node *prev, *next;
};
的int將採取四個字節,但對於「下一個」和「下一頁」指針?這個類的對象的總大小呢?
在這個例子中類有多少內存分配給這個類的對象?
class example
{
public:
int x;
}
的對象的對象將被分配的4個字節的存儲器。作爲一個int將需要4個字節。
多少內存將被分配到後面的類的對象 -
class node
{
public:
int data;
node *prev, *next;
};
的int將採取四個字節,但對於「下一個」和「下一頁」指針?這個類的對象的總大小呢?
對象的總大小是sizeof(int) + 2*sizeof(node*) +
任何填充編譯器可能會成員之間增加的確切大小。使用sizeof(node)
是唯一便攜和可靠的方式來找出。
指針在x86系統上的大小爲4個字節,或在x64系統上的大小爲8個字節。
因此,您的總大小node
是4 + 4 + 4或4 + 8 + 8,它是x86架構上的12個字節,或x64架構上的20個字節。
因爲填充,但是在x64體系結構上,該類的實際大小將爲24個字節,因爲x64體系結構需要8個字節的對齊方式。
正如奧利弗查爾斯沃思提到的,你也可以做std::cout << sizeof(node) << "\n";
,它會告訴你等級節點
爲什麼不用'sizeof'找出? – 2014-10-04 15:27:18
這個問題太廣泛了,因爲基本上,每個自然數都可以用作這個問題的答案。該標準沒有指定基元類型的大小。它依賴於實現。使用'sizeof'並瞭解填充。 – Shoe 2014-10-04 15:30:53