2010-10-22 123 views
1

是否有可能在C/C++程序中爲特定數組分配虛擬內存(交換空間),以便程序繼續使用RAM作爲其餘變量,也許在某些類型的問題上獲得一些好處?分配內存之前虛擬內存

+1

你有什麼具體的擔心?通常,操作系統和默認的分配器處理事情(包括大事情:)就好了。 – 2010-10-22 16:21:29

+0

我有一個程序處理二叉樹,非常大的程序,並生成格式化爲字符串(符號數學)的數學表達式,這些表達式添加到一個大數組中,但是在添加過程中,我需要將它們放在正確的位置,像如果它是一個矩陣。 – labotsirc 2010-10-22 17:13:27

回答

9

對於第一部分:在幾乎每一個現代操作系統中,都有一種將文件映射到內存位置的方法。你可以這樣做,並使用該文件作爲你描述的「交換空間」。 POSIX標準定義了mmap(可通過Linux和Mac OS使用),Windows有MapViewOfFile

對於第二部分:它很大程度上取決於您遇到的問題類型。機會只會讓訪問陣列的速度變慢(比如「可笑的變慢」)並且沒有任何幫助,除非它是一個龐大的陣列,並且您正在尋找一種通過將內容外包到硬盤驅動器來節省內存的方法。通常情況下,你的操作系統會自己分配交換空間並按照它認爲合適的方式處理交換空間,所以明確地使用文件作爲額外的內存對於我來說看起來不是一個好的解決方案。

+0

+1 - 儘管您在Windows上尋找的電話是「MapViewOfFile」。 – 2010-10-22 16:30:48

+0

@比利奧尼爾謝謝,改變了這一點。 – zneak 2010-10-22 16:32:52

+0

謝謝,那麼自動操作系統交換應該小心希望有人需要什麼,我只是好奇,如果有更好的解決方法 – labotsirc 2010-10-22 17:10:17

1

您應該允許操作系統來處理該問題。如果你決定在磁盤上「分配」空間,訪問你的數組將非常慢,並且考慮到數組可能是非常大的操作,這將需要永久。目前所有的操作系​​統都應該支持自動將程序內存放入交換區或頁面文件中。如果你對性能沒有興趣,你可以在「內存」中創建自己的數組,但是我會建議你不要在運行時在程序中發生某些事情,否則這可能不會被清理乾淨,並可能導致更多問題。

+0

好吧,非常清楚,我認爲不好的只是使用交換處理的操作系統。如果它智能地處理它,那麼我不會達到比 – labotsirc 2010-10-22 17:11:32

+0

更好的解決方案,當然,謝謝! – labotsirc 2010-10-22 17:16:26

+0

如果它同時存在大量內存,則可能會遇到導致程序運行緩慢的硬故障問題,因爲其大部分內存位於頁面/交換中,只需儘可能保持乾淨,以避免造成較大的內存性能問題取決於你想要做什麼 – 2010-10-23 04:07:24