在 Win32 上使用 GlobalMemoryStatusEX 的问题

Problems using GlobalMemoryStatusEX on Win32

我面临以下问题:我需要找到我系统上的可用内存。 GlobalMemoryStatusEX 在 x64 上构建时工作正常。但是在 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

非常感谢!

你的程序从来不显示返回值,你也不说什么是"wrong",所以我不知道你指的是什么问题。 Intel Visual Fortran 提供了一个使用 GlobalMemoryStatusEx 的 MemoryStatus 示例程序(在 Win32 示例集合中)。当我在我的 64 位系统上以 32 位模式 运行 它显示:

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