gpt4 book ai didi

windows - 如何使用 Perl 或任何其他语言在 Windows x86-32bit 上找到确切的物理内存量?

转载 作者:可可西里 更新时间:2023-11-01 10:02:16 31 4
gpt4 key购买 nike

我需要知道一台 Windows 机器有多少物理内存,使用 Perl。

我试过使用 Win32::SystemInfo .但是,此模块声明了以下警告:

On Intel x86 computers with more than 2 GB and less than 4 GB of memory, the MemoryStatus function will always return 2 GB for TotalPhys. Similarly, if the total available memory is between 2 and 4 GB, AvailPhys will be rounded down to 2 GB.

所以在一台有 2-4 GB 物理内存的机器上,我得到一个错误的答案。

有没有办法获得正确数量的物理内存?也许另一个模块?或者直接使用Win32::API

编辑:从人们在这里给出的评论来看,似乎限制在 Win32 API 中,而不是特定于 Win32::SystemInfo .然而,操作系统确实知道确切有多少物理内存可用,因此必须有一种方法来提取该信息。如果不是 Perl,那么也许是另一种语言?

最佳答案

如评论中所述,这是 GlobalMemoryStatus 的问题,因为它最多可以返回 2GB 的答案。和 GlobalMemoryStatusEX这解决了 2GB 限制的问题,但仅适用于 64 位系统(据我所知)。

最后,我使用了以下 Perl 代码,它使用了 Win32::OLE 和 WMI 类 Win32_PhysicalMemory ,即使在 32 位系统上也能返回正确数量的物理内存:

use strict;
use warnings;
use English;
use Win32::OLE qw( EVENTS HRESULT in );
use Readonly;

sub get_physical_memory {
my $machine = shift || '.'; # Default to local machine
my Readonly $WMI_MEMORY_CLASS_NAME = 'Win32_PhysicalMemory';
my Readonly $MEGABYTE = 1024*1024;

my $WMI =
Win32::OLE->GetObject( "winmgmts:{impersonationLevel=impersonate,(security)}//$machine/" ) || die "Could not get Win32 object: $OS_ERROR";
my $total_capacity = 0;

foreach my $object ( in( $WMI->InstancesOf( $WMI_MEMORY_CLASS_NAME ) ) ) {
$total_capacity += $object->{Capacity};
}

my $total_capacity_in_mb = $total_capacity / $MEGABYTE;
print "Total Memory : $total_capacity_in_mb \n";
return $total_capacity_in_mb;
}

关于windows - 如何使用 Perl 或任何其他语言在 Windows x86-32bit 上找到确切的物理内存量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/423797/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com