任何建議/提示/鏈接/教程,將不勝感激! :)Win32/MFC:如何找到可用內存(RAM)?
回答
GlobalMemoryStatus/GlobalMemoryStatusEx
http://msdn.microsoft.com/en-us/library/aa366586(VS.85).aspx
真的是沒有答案。在正常情況下,操作系統將在系統的所有內存中保留東西。基本上,一旦它將某些東西讀入內存中,它就會將它保存在內存中,直到其他東西需要內存,這樣第一個內存纔會被啓動。有很多函數可以讓你獲得關於內存的信息,但是他們都沒有嘗試真正返回一些完全沒有用的內存。我知道其中最接近的是GlobalMemoryStatusEx
,它確實返回了可用內存量的數字。
這意味着當前內存中的任何內存當前都位於磁盤上的內存和中,因此可以丟棄內存中的副本而無需先將其寫入磁盤。例如,如果你運行一個程序,大部分代碼會留在內存中(直到其他東西需要內存),以防萬一你決定再次運行它。由於它只是磁盤上程序的一個副本,因此可以在需要時將其丟棄,並且(如有必要)從磁盤重新加載。
如果你想要更多的細節,你可以使用像VirtualQueryEx
這樣的東西來獲得它 - 但它通常會讓你的信息超載,告訴你在給定的過程中使用的每塊內存,而不是給出一個好的,簡單的數字說「x字節免費」。
這很容易回答,空閒內存總是足夠接近0認爲它爲零,並沒有打擾。文件系統緩存始終使用未使用的RAM,您可以在Taskmgr.exe的「性能」選項卡中看到此內容。
如果你實際上是指「免費虛擬內存」,你真正關心的數字,那麼答案是「不太可能」。你需要使用HeapWalk(),這是一個非常尷尬和危險的函數。只有HeapWalk可以檢測堆中標記爲空閒但仍然映射的塊。無論如何,你到達的號碼都毫無意義。一個程序永遠不會用完免費的虛擬內存塊,它總是首先耗盡足夠大的內存塊。
檢測此狀況非常簡單。 malloc返回NULL,新的運算符拋出std :: bad_alloc。處理這種情況並不容易。解決這個問題需要花費不到兩百美元,大約是64位版本Windows的許可費用。
- 1. NSURL在內存RAM
- 2. 如何使用PHP將數據存儲在RAM內存中?
- 3. 內存(Ram)溢出Swift
- 4. 如何使Android應用程序「吃」的RAM內存
- 5. 如何從RAM內存中存儲和加載類?
- 6. Android Constrain佈局使用太多的內存(RAM)(內存泄漏)
- 7. Varnish Alternative - 用Serverpilot緩存到RAM
- 8. Android如何在設備中獲得全部內存RAM?
- 9. 如何確保內存映射文件始終在RAM中
- 10. 如何隱藏內存(RAM)中的敏感字符串?
- 11. 關機前擦除RAM,Linux如何分配內存?
- 12. SQL Server 2008,恢復RAM內存
- 13. Arduino沒有釋放RAM內存
- 14. Azure RAM內存傳輸速率
- 15. 低內存有足夠的空RAM
- 16. Malloc分配內存超過RAM
- 17. Android,一個不可能的內存泄漏,如何用eclipse找到它?
- 18. 如何在wince設備上找到SD卡上的可用內存(C++)
- 19. 在Java中,如何刷新CPU內存緩存以便從RAM內存中檢索最新內容?
- 20. Android。如何保持RAM緩存?
- 21. 如何使用所有可用內存
- 22. 如何使用可用RAM有效地緩存Java中的對象?
- 23. 如何找到指針引用的內存大小?
- 24. 如何找到內存利用由升壓bimap的
- 25. 如何在流星應用程序中找到內存泄漏
- 26. 如何找到使用內存分析工具
- 27. 如何使用PowerShell查找CPU和RAM使用情況?
- 28. Cassanda,可用的RAM最多可用
- 29. 如何在數字範圍內找到可用的批次php
- 30. 如何使用malloc()在redhat中分配比RAM更多的內存?
我建議您改進問題(或問一個新問題),並提供更多的背景信息,您試圖實現什麼目的,您需要知道「可用RAM」以及哪種內存操作你的程序呢。找出並解釋正確的記憶狀態並不容易。即使你知道它,由於內存碎片,你永遠無法確定malloc/new操作是否成功。作爲一名程序員,我在自己的Carreer中度過了最糟糕的時光,因爲我相信:如果我的計算機中有足夠的內存,我就不會遇到內存操作問題。我真的錯了。 – Slauma 2010-03-26 15:02:14