2013-02-02 41 views
0

我想創建大量相同類型的對象,並且我希望它們在內存中相對較近以避免頁面丟失。運算符新增地址提示(在另一個對象附近創建對象)

有沒有辦法告訴操作系統(Windows平臺)分配內存儘可能接近給定的地址? (地址提示)
某些功能隱藏在MSDN深處?

我知道有操作員放置新的,但我試圖找出是否有任何其他技巧。
是的,我知道如何創建佈局新的自定義的內存管理....

僞代碼(如果存在):

Myclass *a = new Myclass(); 

Myclass *b = AloocateNear(a,sizeof(Myclass)); 
+0

我只是使用放置新的。 –

+1

嗯。陣列。向量。 –

+0

是的,但我不想分配預定義的大小,然後處理釋放和內存碎片。 –

回答

2

放置新的答案。如果你真的真的關心地方,那麼你顯然將不得不使用與某種內存池的新位置。

+0

我知道,問題是如果有另一個功能隱藏在MSDN的某個地方,可能會這樣做 –

+1

@YochaiTimmer:我不這麼認爲。如果已經存在一個完全適用於該語言本身問題的解決方案(閱讀:放置新的解決方案),我認爲編譯作者不會爲此實現擴展。但是再次,他們*是微軟,所以誰知道...... – sheu

6

使用std::vector。在索引X和X + 1處的項目是保證彼此相鄰。


正如在評論(謝謝sheu)中指出的,這個解決方案使得很難破壞單個對象。

+1

只分配sizeof(Myclass)的X倍並使用放置new來在那裏創建對象會更有效率。雖然是的,這是一個很好的技巧,具有相似的效果。 –

+1

@YochaiTimmer:「只需分配sizeof(Myclass)的X倍,並使用放置new來在那裏創建對象」基本上就是'std :: vector'。 – Fanael

+2

使用'std :: vector'不是「一個不錯的技巧」。任何理由重新發明它都不是「訣竅」。你爲什麼認爲你的方式「更高效」? –

相關問題