由於RAM似乎爲the new disk,並且由於該語句也意味着訪問內存現在被認爲是緩慢的,類似於磁盤訪問一直如此,所以我確實希望最大化內存中對高性能應用程序的引用的位置。例如,在排序索引中,我希望相鄰值相近(不同於在散列表中),並且我也希望索引指向的數據也靠近。在C中,我可以使用專門的內存管理器抽取數據結構,就像(非常複雜的)開發人員一樣。通過直接控制指針,它們甚至可以在指針值本身編碼附加信息。當使用Python,Java或C#工作時,我故意從這種類型的解決方案中抽象出一個(或多個)級別,並且我委託JIT編譯器並優化運行時間,爲我做低級別的巧妙技巧。在託管代碼中,如何實現良好的引用位置?
不過,我想,即使是在這樣高層次的抽象,有可語義認爲是「接近」,因此很可能是實際上接近在低水平的東西。例如,我想知道以下內容(我在括號中的猜測):
- 我可以期待一個數組是相鄰的內存塊(是)嗎?
- 同一個實例中的兩個整數在相同類的不同實例中可能比兩個更接近(可能)?
- 對象在內存中是否佔用連續區域(否)?
- 僅有兩個
int
字段的對象數組與兩個int[]
字段的單個對象之間的區別是什麼? (這個例子可能是特定於Java)
我開始懷疑這些在Java方面,但我的疑惑變得更加普遍,所以我建議不要把這個作爲一個Java的問題。
此外,緩存是新的CD-ROM ......並且您現在依賴於您的性能的內部實現細節。一個到.NET的服務包,改變事情在幕後工作,你的整個堆棧崩潰... – wefwfwefwe 2009-10-05 16:57:09
@wefwfwefwe:你的觀點是 - 究竟是什麼?即使Hanno的問題的答案沒有被任何標準保證,如果你真的需要優化,你必須使用_something_來優化。 – hjhill 2009-10-05 20:08:20
關鍵是,你可能會通過試圖超越.net/java開發人員來解決他們應該爲你做的事情。 – wefwfwefwe 2009-10-06 07:30:49