Я пытался получить объем памяти, выделенный моей программой на 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.