c++ - 监控分配的内存量
问题描述
我一直在尝试获取我的 C++ 程序分配的内存量。出于测试目的,我创建了一个结构:
struct player {
string name;
int id;
player(string _name, int _id) : name(_name), id(_id) {}
player(){};
void set(string _name, int _id){
name = _name;
id = _id;
}
string tostring() {
return ("{name: " + name + ", id: " + to_string(id) + "}");
}
};
这就是我在我的主要功能中所做的:
player* players;
players = new player[4]();
players[0].set("a", 1);
players[1].set("b", 2);
players[2].set("c", 3);
players[3].set("d", 4);
for(int i = 0; i < 4; i ++) {
cout << players[i].tostring() << endl;
}
delete [] players;
所以我想在“删除”运算符之前和之后打印分配的内存量。我试图以两种方式做到这一点,由这个线程建议。1)
size_t getMemoryUsage() {
PROCESS_MEMORY_COUNTERS memCounter;
BOOL result = GetProcessMemoryInfo(GetCurrentProcess(), &memCounter, sizeof( memCounter ));
SIZE_T physMemUsedByMe = memCounter.WorkingSetSize;
return physMemUsedByMe;
}
假设这给出了内存,以字节为单位映射到我的进程,我得到的结果总是大约 18.7 MB。但是每次我运行它时,我得到的结果都略有不同。另外,在我调用 delete 操作符后,我得到了 18.8 MB。所以在我释放内存后,我使用的内存会增加???
2)
void printMemoryStatus()
{
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx (&statex);
cout << (statex.ullTotalVirtual - statex.ullAvailVirtual) << endl;
}
还假设此结果以字节为单位,我在输出中得到 145.273 MB。
我的结构的大小是 28 字节,所以我的程序应该使用至少接近 112 字节的东西。所以这两种方法都不是我需要的。如何在没有任何外部工具的情况下获得程序使用的内存量。
我的标题是:
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <windows.h>
#include <psapi.h>
#include <tchar.h>
我在代码块中使用 MinGW 进行编译,将 psapi 库作为链接库。我的 g++ 版本是 Windows 10 上的 9.2.0。
解决方案
推荐阅读
- android - Flutter Quicblox Android 通知设置
- typescript - 基于动态、变量或索引的泛型类型变量
- r - 合并同一类别的值
- api - 安全发送电子邮件 - https://developers.google.com/oauthplayground/
- string - 当要删除的数据不一致时,如何删除部分字符串?
- asp.net-core - Serilog 将日志文件放在解决方案中
- json - 根据字符串数组在jq中过滤
- c++ - C++ 和 sql SELECT 语句
- events - 即使在 html 结尾,事件侦听器也不起作用
- java - 如何 HQL 查询没有 ID 的项目?