gpt4 book ai didi

德尔福2007 : GlobalMemoryStatus to get total RAM

转载 作者:行者123 更新时间:2023-12-03 15:30:39 25 4
gpt4 key购买 nike

我需要使用 Delphi 2007 获取系统的总物理内存。在 4GB 或更大内存的系统上使用 GlobalMemoryStatus 似乎会给我带来错误。在 Delphi 2007 中,GlobalMemoryStatusEx 不存在,因此我手动将函数调用添加到我的程序中。它在我的 Windows 7 x64 上正确返回内存 (8GB),但在 Vista x32 系统上它仍然返回错误值(在此系统上应为 4GB,但返回 2.9GB)。知道我可能做错了什么吗? GlobalMemoryStatusEx 可以在旧操作系统上工作吗?

type
DWORDLONG = UInt64;

PMemoryStatusEx = ^TMemoryStatusEx;
TMemoryStatusEx = packed record
dwLength: DWORD;
dwMemoryLoad: DWORD;
ullTotalPhys: DWORDLONG;
ullAvailPhys: DWORDLONG;
ullTotalPageFile: DWORDLONG;
ullAvailPageFile: DWORDLONG;
ullTotalVirtual: DWORDLONG;
ullAvailVirtual: DWORDLONG;
ullAvailExtendedVirtual: DWORDLONG;
end;

function GlobalMemoryStatusEx(var lpBuffer: TMemoryStatusEx): BOOL; stdcall; external kernel32;

function getmemorysize:word;
var
memory: TMemoryStatusEx;
begin
FillChar(memory, SizeOf(memory), 0);
memory.dwLength := SizeOf(memory);
GlobalMemoryStatusEx(memory);
result:=memory.ullTotalPhys div (1024*1024);
end;

最佳答案

这是可以预料的,你没有做错任何事。 Windows 在 32 位操作系统上不会报告 4GB 内存。这是来自 MSDN blog article 的引用题为“3GB 而非 4GB RAM 问题”:

Due to an architectural decision made long ago, if you have 4GB of physical RAM installed, Windows is only able to report a portion of the physical 4GB of RAM (ranges from ~2.75GB to 3.5GB depending on the devices installed, motherboard's chipset & BIOS).

GlobaMemoryStatusEx 应该在 Windows 2000 及更高版本上工作(后来的 MSDN 文档不包括 Win2K,但早期的文档包含它)。

关于德尔福2007 : GlobalMemoryStatus to get total RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779234/

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