Мониторинг объема выделенной памяти - PullRequest
0 голосов
/ 20 июня 2020

Я пытался получить объем памяти, выделенный моей программой на 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 Мбайт. Но каждый раз, когда я запускаю его, я получаю немного другой результат. Кроме того, после вызова оператора удаления я получаю 18,8 Мбайт. Итак, после того, как я освобождаю память, объем используемой мной памяти увеличивается ???

2)

void printMemoryStatus()
{
    MEMORYSTATUSEX statex;
    statex.dwLength = sizeof (statex);
    GlobalMemoryStatusEx (&statex);
    cout << (statex.ullTotalVirtual - statex.ullAvailVirtual) << endl;
}

Также предполагая, что этот результат выражен в байтах, на выходе я получаю 145,273 МБ.

Размер моей структуры составляет 28 байтов, поэтому моя программа должна использовать что-то, по крайней мере, близкое к 112 байтам. так что ни один из этих двух методов мне не нужен. Как я могу получить объем памяти, который моя программа использует без каких-либо внешних инструментов.

Мои заголовки:

#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <windows.h>
#include <psapi.h>
#include <tchar.h>

Я компилирую с MinGW в кодовых блоках, с библиотекой psapi в качестве связанной библиотека. Моя версия g ++ - 9.2.0 на Windows 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...