首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GlobalMemoryStatusEx() (Win32)

GlobalMemoryStatusEx() (Win32)
EN

Stack Overflow用户
提问于 2011-07-23 14:27:39
回答 3查看 4.3K关注 0票数 2

MSDN中对GlobalMemoryStatusEx()的描述是:

由GlobalMemoryStatusEx函数返回的信息是不稳定的。不能保证对该函数的两个顺序调用将返回相同的信息。

这个函数返回的一个信息是“总物理内存(以字节为单位)”。(这与可用的物理内存数量不同,还有另一个MEMORYSTATUSEX结构的成员。)

在每次运行程序时,总物理内存怎么可能改变呢?我将这些值输出到一个文本文件中,并得到以下结果:

代码语言:javascript
运行
复制
55872198592
55837267904
8589934605
55835301824
55848146880
55849064384
55849129920
55836743616
8589934605
8589934605
8589934605
8589934605
55835105216

我有4GB的系统内存。如果我在64位操作系统上,是否需要调用另一个API函数?

以下是代码:

代码语言:javascript
运行
复制
#include <Windows.h>
#include <string>
#include <sstream>
#include "Game.h"
#include <fstream>

void Game::CheckMemory(DWORDLONG& a)
{
MEMORYSTATUSEX status;
GlobalMemoryStatusEx(&status);

a = status.ullTotalPhys;

std::stringstream ss;

ss << "Total Physical Memory: " << status.ullTotalPhys << "bytes." << std::endl;

MessageBoxA(NULL, ss.str().c_str(), "Mem Summary", 0);
}

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                PSTR szCmdLine, int iCmdShow)
{
DWORDLONG a;
Game g;
g.CheckMemory(a);

std::fstream fs("test.txt", std::fstream::in | std::fstream::out | std::fstream::app);

fs << a << std::endl;

fs.close();

return 0;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-23 14:47:42

在调用函数之前,必须初始化MEMORYSTATUSEXMEMORYSTATUSEX成员。

代码语言:javascript
运行
复制
MEMORYSTATUSEX status;
status.dwLength = sizeof(status);
GlobalMemoryStatusEx(&status);

在对结构进行任何操作之前,您应该检查它的返回值。

票数 11
EN

Stack Overflow用户

发布于 2011-07-23 14:36:58

您确定输出的字段是正确的吗?你列出的第一个数字大约是55 GB,如果你只有4GB的内存,那就没有什么意义了。

票数 0
EN

Stack Overflow用户

发布于 2014-03-05 12:51:10

正如msdn中提到的:您可以使用GlobalMemoryStatusEx函数来确定应用程序可以分配多少内存,而不会对其他应用程序造成严重影响。

GlobalMemoryStatusEx函数返回的信息是不稳定的。不能保证对该函数的两个顺序调用将返回相同的信息。

ullAvailPhys的MEMORYSTATUSEX结构的lpBuffer成员包括所有NUMA节点的内存。

因此,在不同的调用中,返回值可以是不同的,这是正确的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6801008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档