gpt4 book ai didi

c - 全局内存状态Ex() (Win32)

转载 作者:行者123 更新时间:2023-12-01 22:29:58 26 4
gpt4 key购买 nike

MSDN 中对 GlobalMemoryStatusEx() 的描述说:

The information returned by the GlobalMemoryStatusEx function is volatile. There is no guarantee that two sequential calls to this function will return the same information.

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

程序每次运行总物理内存怎么可能变化?我将值输出到一个文本文件并得到这些结果:

55872198592
55837267904
8589934605
55835301824
55848146880
55849064384
55849129920
55836743616
8589934605
8589934605
8589934605
8589934605
55835105216

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

代码如下:

#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;
}

最佳答案

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

MEMORYSTATUSEX status;
status.dwLength = sizeof(status);
GlobalMemoryStatusEx(&status);

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

关于c - 全局内存状态Ex() (Win32),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6801008/

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