【问题标题】:Problems using GlobalMemoryStatusEX on Win32在 Win32 上使用 GlobalMemoryStatusEX 的问题
【发布时间】:2023-03-03 07:26:20
【问题描述】:

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

非常感谢!

【问题讨论】:

  • 允许 32 位代码在 64 位操作系统上执行的 wow64 模拟器非常强大,它非常擅长让 32 位代码相信它在 32 位操作系统上运行。包括生成“错误”值在内,32 位操作系统当然不能拥有超过 4 GB 的地址空间。实际上有更多的“可用内存”对于 32 位应用程序来说是一个毫无意义的细节,它不能直接利用它。使用 64 位编译器。

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


【解决方案1】:

您的程序从不显示返回的值,并且您没有说“错误”是什么,所以我不知道您指的是什么问题。英特尔 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 可用的物理和虚拟内存的正确方法。你只需要知道如何正确解释它。

【讨论】:

  • 非常感谢您的回答。 Win32 中的示例帮助我从 GlobalMemoryStatusEX 中提取了我需要的信息。
猜你喜欢
  • 2011-10-11
  • 2011-10-26
  • 2011-04-16
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多