2012-03-01 49 views
1

我讀過一個性能結構的理想大小,它將用於大型集合中,爲32字節。這是真的嗎?爲什麼?這會影響64位處理器嗎?還是不適用?現代系統的最佳結構尺寸

這是基於現代(2008+)家庭英特爾架構的系統。

+1

推測是基於最高效的讀/寫對齊大小或與緩存有關。咩!這個也行。 – dmckee 2012-03-01 23:50:15

+0

對於某些應用程序來說,對齊的數量可能大於大小。 – Flexo 2012-03-01 23:50:43

+0

從32bit的限制中,我可以假設這是爲了能夠將整個結構放入寄存器以便更快地訪問和使用。 – Odinn 2012-03-01 23:51:00

回答

2

結構的理想大小可能是一個高速緩存行(或其一個子數)。一級高速緩存行通常是32或64 字節。將數據結構的元素跨越緩存行邊界將需要兩次主內存訪問來讀取或寫入它,而不是一次。

+0

如果編譯器優化結構以適應寄存器,那麼它們之間的關係是高速緩存行大小和寄存器大小之間的關係? – 2012-03-02 00:31:54

+0

我不同意這個答案。如果你的結構只需要包含1位數據,那麼在每個數據結構上浪費整個32或64個字節就會浪費更多的緩存行。唯一一次有這種浪費的填充是有意義的,即當對象的數量非常小,並且它們是從運行在不同內核上的不同線程訪問時。 – 2012-03-02 00:32:50

+1

@Loki:編譯器確實沒有這種結構尺寸的自由。即使它沒有固定的ABI,C標準對結構的相對排列提出了要求,其結構的初始子序列同意使得不可能同時用填充同時「優化」多個結構的尺寸。 – 2012-03-02 00:34:15

0

我不認爲你的問題有合理的答案。沒有關於應用環境的任何信息,「結構的理想尺寸」是方式,方式不明確。另一方面,32位是一個現代整數的空間 - 除了幾個字符或位域之外,它對於「結構」來說不夠大。

+0

問題說「32 **字節**」不是位。 Markgz正確地指出,這適合單緩存行。 – MSalters 2012-03-02 08:59:51

11

結構的理想大小足以容納它需要包含的信息。

+1

+1因爲直言不諱。 – Mysticial 2012-03-02 00:01:33

+0

無論如何,但我想我的答案是這個更詳細的版本。 :-) – 2012-03-02 00:09:52

+0

@R:我其實會詳細說明這一點,但我不得不離開。現在我想我會放棄它。 – 2012-03-02 03:23:34

6

結構的最佳大小通常是存儲它應該包含的任何數據所需的最小大小,而不需要任何諸如bit twiddling/misaligned訪問之類的攻擊來使其適合。