我遇到以下问题:我需要找到系统上的可用内存。在x64上构建时,GlobalMemoryStatusEX工作正常。但在Win32上构建时给出了错误的答案。我在Windows 7 64位上使用Intel Visual Fortran 2010。 以下是我的代码示例:
program test
use kernel32
use ifwinty
implicit none
type(t_memorystatusex) :: status
integer :: RetVal
status%dwLength = sizeof(status)
RetVal = GlobalMemoryStatusEX(status)
end program test
非常感谢!
答案 0 :(得分:0)
你的程序永远不会显示返回的值,而你没有说出什么是“错误”,所以我不知道你指的是什么问题。 Intel Visual Fortran提供了一个使用GlobalMemoryStatusEx的MemoryStatus示例程序(在Win32示例集合中)。当我在32位模式下在64位系统上运行它时,它会显示:
48% of memory is in use
15.99GB total physical memory
8.28GB available physical memory
31.98GB total pageable memory
24.42GB available pageable memory
2.00GB total virtual memory
1.98GB available virtual memory
并在64位模式下运行时:
48% of memory is in use
15.99GB total physical memory
8.28GB available physical memory
31.98GB total pageable memory
24.42GB available pageable memory
8192.00GB total virtual memory
8191.99GB available virtual memory
请注意,唯一的区别在于虚拟内存,正确反映了32位和64位模式之间的差异。
在大多数情况下,您不需要找到可用内存量 - 在程序运行期间,几乎所有可以获得的指示都没有帮助。特别是,可用的虚拟内存并不一定意味着您可以分配大小的单个数据块,因为内存池可能有些碎片化。
所以我的答案是你的代码,你展示的代码,是找出Windows可用的物理和虚拟内存的正确方法。你只需要知道如何正确解释它。