我想知道哪一個更好,2個數組或者具有2個數據成員的結構的數組。 我想要關於以下方面的見解:2數組vs 2個數據成員的結構陣列
- struct是一種包含額外內存的包裝嗎?我知道結構中的填充符合詞的限制。
- 如果我想同時訪問兩個數據成員,哪一個更快?我認爲它的結構陣列。
- 由於結構填充的可能性,一個結構的數組可能會佔用比2個數組更多的內存。
在一般情況下和語言特定的答案都是受歡迎的。
請不要建議看看SoA和AoS問題,已經這樣做了。
我想知道哪一個更好,2個數組或者具有2個數據成員的結構的數組。 我想要關於以下方面的見解:2數組vs 2個數據成員的結構陣列
在一般情況下和語言特定的答案都是受歡迎的。
請不要建議看看SoA和AoS問題,已經這樣做了。
這完全取決於你想要做什麼,既不是答案總是「正確」。
外特定於編譯器的填充物,除非你把它虛擬的結構不佔用任何額外的內存,在這種情況下,它會得到一個虛函數表指針,但僅此而已。
只要您的計算機具有足夠大的緩存以容納兩頁(通常每個4KB,但檢查特定的CPU),則無關緊要,您應該選擇哪一個更容易工作與你的代碼更有意義。結構數組將使用一個頁面,並導致每加載一個4KB的結構會導致一次高速緩存未命中,而值的數組將加載兩個導致兩次高速緩存未命中的頁面。如果你碰巧正在使用一個只允許一個緩存用於你的程序數據的dinky緩存,那麼是的,使用一個結構數組將會快得多,因爲替代方法會導致每次讀取都會導致緩存未命中。
與#1相同的答案 - 數組永遠不會有自己的填充,但是一個結構體可能會使用編譯器內置的填充。
雖然struct padding完全取決於你的編譯器,它可能有標誌來打開或關閉它或設置最大焊盤尺寸或其他。檢查對象數組的原始數據以查看它們是否有填充,如果有,請在需要時使用編譯器瞭解如何在編譯器中關閉該數據。
你正在使用什麼編譯器,你想用你的項目做什麼?
也許更重要的是:你的項目在哪個階段,你是否遇到過速度問題?預先優化是所有弊端的根源,而且你可能會浪費你的時間擔心這個問題。
不要忘記保持數據在一起的一個重要原因:代碼可讀性。如果您打算獨立處理每個字段的不同線程。如果您使用陣列,可能會提高性能。
這只是一個想法,我只是想解決一個編程問題。 –