首页 > 解决方案 > 监控分配的内存量

问题描述

我一直在尝试获取我的 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。

标签: c++c++17dynamic-memory-allocation

解决方案


推荐阅读