2012-05-31 72 views
2

在C++中,如何檢查我有多少RAM?C++檢查可用的內存?

我在windows上,但對Unix的答案以及窗口感興趣。

+2

您是指物理內存可用於系統或您的進程的虛擬內存? – Vlad

+3

http://stackoverflow.com/questions/2513505/how-to-get-available-memory-c-g –

回答

5

窗戶:GlobalMemoryStatusEx。 MSDN頁面有一個詳細的C示例代碼。

Linux系統:檢查 「的/ proc/meminfo中」 文件(discussion

OSX:看到這個SO線程Determine physical mem size programmatically on OSX

的問題是不明確的,但是。有物理內存,虛擬內存,操作系統有能力將一些未使用的頁面交換到磁盤/其他存儲。

如果你需要編寫某種系統監視器,那麼我的答案會做。

如果您需要確保沒有任何malloc()/ new []調用失敗,那麼只需捕獲適當的異常或處理NULL結果。另一種選擇是構建你自己的分配器,它在開始時獲得一個大內存塊,並在那裏分配較小的塊。

編輯:答案評論

到WinAPI的的MapViewOfFile的電話和的CreateFileMapping提供錯誤代碼來排除致命的情況。由於文件被映射到與進程數據共享的虛擬地址空間,因此您可以檢查是否有足夠數量的可用頁面。也就是說,如果您使用的是32位系統,那麼您將無法一次將整個8Gb文件映射到內存(但您可以映射其較小的部分),但在64位系統上映射的可能性對於任何當前需求都足夠了。

+0

這是將文件映射到內存快速讀取... – mezamorphic