2013-10-02 34 views
1

由於這個問題所暗示的,什麼是平常節點的大小:一個節點的大小是多少?數據保存在哪裏?

struct node{ 
    int data; 
    node* next; 
}; 

如果結構保存數據和下一個節點的地址,什麼是指針地址(不是它指向)的大小? 如果下一個指向NULL,是否有區別?

哪裏是數據(不是指針)保存,棧或堆,如果我做了「新節點」:

node* linkednode= new node; 

是答案改變,如果我做了等級節點?

+3

嘗試'sizeof(node)'。 – juanchopanza

+0

這是實現定義,我們不能給你一個答案,只有你的平臺上的編譯器可以。 – nijansen

+0

這取決於。請參閱:http://stackoverflow.com/q/399003/78845 – Johnsyweb

回答

0

無論成員值是什麼,結構的大小都是固定的。在這種情況下,它可能是8或16字節(取決於您是在32位還是64位平臺上)。如果您檢查例如sizeof(node)

大小取決於32位或64位平臺的差異,是因爲指針。指針在32位平臺上是32位(即4字節),而在64位平臺上是64位(即8字節)。 int類型爲通常爲所有平臺上的32位(4字節),但在嵌入式系統或大型機上可能不同。

64位平臺上不是12字節(4 + 8)的原因是因爲對齊。編譯器將確保指針處於良好的對齊狀態,以加快對該成員的訪問速度。

+0

...或8位或16位... – Johnsyweb

+0

我不認爲它可以明顯地是12個字節,除非有一些真正奇怪的對齊鬆弛。 –

+0

@KerrekSB你可能是對的。更新答案,並解釋原因。 –

1

您可以使用sizeof()函數輕鬆檢查這些函數,它不僅可以將它應用於您的int和指針變量,還可以用於節點本身。 通常int s和指針在32位平臺上是4字節,所以這是實現定義的,可能在其他平臺上有所不同。 node的總大小可能等於8,但可能不是由於上述原因和/或數據對齊。

+0

「通常」在32位平臺上。 – Johnsyweb

相關問題