Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Win32/MFC:如何找到可用的可用内存(RAM)?_Windows_Memory_Mfc_Winapi - Fatal编程技术网

Windows Win32/MFC:如何找到可用的可用内存(RAM)?

Windows Win32/MFC:如何找到可用的可用内存(RAM)?,windows,memory,mfc,winapi,Windows,Memory,Mfc,Winapi,任何建议/提示/链接/教程都将不胜感激!:) GlobalMemoryStatus/GlobalMemoryStatusEx 这个问题确实没有答案。在正常情况下,操作系统将在系统的所有内存中保留一些内容。基本上,一旦它将某个内容读入内存,它会在内存中保留一个副本,直到其他内容需要内存,所以第一个内容会被踢出。有许多函数可以获取有关内存的信息,但它们甚至都没有尝试返回完全未使用的内存量。我所知道的最接近的是,它确实返回可用内存量的数字 这意味着当前内存中的内容当前既在内存中也在磁盘上,因此可以丢弃

任何建议/提示/链接/教程都将不胜感激!:)

GlobalMemoryStatus/GlobalMemoryStatusEx


这个问题确实没有答案。在正常情况下,操作系统将在系统的所有内存中保留一些内容。基本上,一旦它将某个内容读入内存,它会在内存中保留一个副本,直到其他内容需要内存,所以第一个内容会被踢出。有许多函数可以获取有关内存的信息,但它们甚至都没有尝试返回完全未使用的内存量。我所知道的最接近的是,它确实返回可用内存量的数字

这意味着当前内存中的内容当前既在内存中也在磁盘上,因此可以丢弃内存中的副本,而无需先将其写入磁盘。例如,如果您运行一个程序,大部分is代码将保留在内存中(直到其他程序需要内存),以防您决定再次运行它。由于它只是磁盘上程序的一个副本,所以可以将其丢弃,并在需要时(如有必要)从磁盘重新加载


如果你想要更多的细节,你可以使用类似的方法来获取它——但它通常会让你的信息过载,告诉你给定进程中使用的每个内存块,而不是给出一个漂亮的简单数字,说“x字节可用”。

这很容易回答,免费RAM总是足够接近0,认为它是零,不麻烦。文件系统缓存始终使用未使用的RAM,您可以在Taskmgr.exe的“性能”选项卡中看到这一点

如果你实际上指的是“空闲虚拟内存”,即你真正关心的数字,那么答案是“不可能”。您需要使用HeapWalk(),这是一个非常笨拙和危险的函数。只有HeapWalk可以检测堆中标记为空闲但仍映射的块。不管怎样,你得到的数字毫无意义。一个程序永远不会耗尽可用的虚拟内存块,它总是首先耗尽足够大的内存块


检测这种情况很容易。Malloc返回NULL,新操作符抛出std::bad_alloc。处理这种情况并不容易。解决这个问题只需要不到200美元,大约相当于64位版本Windows的许可证费用。

我建议您完善这个问题(或提出一个新问题),并提供更多的背景信息,说明您试图实现的目标,您需要了解“可用RAM”的用途以及您的程序执行的内存操作类型。找出并正确解释记忆状态并不容易。即使您知道,由于内存碎片,您也无法确保malloc/new操作成功。作为一名程序员,我度过了我职业生涯中最糟糕的时光,因为我相信:如果我的计算机中有足够的RAM,我就不会有内存操作方面的问题。我错了。