1

假設我們有一個類A,並且我有一個指向A對象的指針數組,當我遍歷數組中的每個元素時,我可能會導致現金未命中,因爲每個對象都在內存中的不同位置,並且它們不對齊在同一個程序塊中,因爲它是一個指向對象而不是實際對象的指針數組。確實使用自定義塊分配器來分配放入數組中的指針解決現金丟失問題?

我想通過創建一個自定義分配器來解決這個問題,我用它來分配這些對象並將它們的指針放在數組中。分配器確保所有對象在內存中總是彼此相鄰,並在一個塊中對齊。迭代數組時,這是否解決了現金丟失問題?

更多細節:

我將創建一個自定義的分配器,該分配器將ALLOC的內存足夠大,以處理所有的對象塊,後來當我ALLOC一個對象,這個分配器將選擇塊內的自由空間每次嘗試將所有對象放在一個接一個的位置,這樣它們立即被加載到現金存儲器並且會導致更少的現金缺失

+0

什麼?我的意思是你的建議解決方案。 – gsamaras

+0

我將創建一個自定義分配器,此分配器將分配一塊足夠大的內存來處理所有對象,稍後當我分配一個對象時,此分配器將選擇該塊內的空閒空間,每次嘗試使所有對象放置一個下一個到另一個,這樣他們立即被加載到現金記憶,並會導致更少的現金錯過 –

回答

0

當您通過第一個指針訪問第一個對象時,指針將被提取到緩存中,然後是幾個對象。

所以,當你訪問第二個指針時,它確實已經在緩存中,第二個對象也是如此。等等。

所以是的,這會有所幫助,但是不能直接使用直接存儲實際對象的內存塊,而不是指針?如果不是,請嘗試重新評估您的設計。直接使用對象將最大化對象的數據局部性。

+0

好!我真的有使用指針,因爲對象具有允許被覆蓋的虛擬函數,除了對象將具有不同的大小(相同的基類)...(分配器可以處理這個) –

+0

我正在等待另一個,仍然,不要擔心好友,我永遠不會忘記,我會接受最好的答案;),請嘗試通過添加對信息起源的引用來改進它,並刪除'可能'使事情確定,因爲我知道這很可能 –