在Win32上使用GlobalMemoryStatusEX的问题

时间:2015-01-21 08:33:41

标签: visual-studio-2010 fortran 32bit-64bit

我遇到以下问题:我需要找到系统上的可用内存。在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

非常感谢!

1 个答案:

答案 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可用的物理和虚拟内存的正确方法。你只需要知道如何正确解释它。