sysinfo
показывает только всю системную память, а не отдельную память процесса.
Для использования памяти процесса вы можете попробовать mallinfo
, например
struct mallinfo before = mallinfo();
// radix sort code
struct mallinfo after = mallinfo();
Теперь вы можете сравнивать различные записи до и после кода сортировки. Имейте в виду, что это не включает в себя стековую память.
Хотя я не знаю, насколько точны эти числа в контексте C ++.
Тестирование полного примера
#include <malloc.h>
#include <stdio.h>
#define SHOW(m) printf(#m "=%d-%d\n", after.m, before.m)
int main()
{
struct mallinfo before = mallinfo();
void *p1 = malloc(1000000);
//int *p2 = new int[1000000];
struct mallinfo after = mallinfo();
SHOW(arena);
SHOW(ordblks);
SHOW(smblks);
SHOW(hblks);
SHOW(hblkhd);
SHOW(usmblks);
SHOW(fsmblks);
SHOW(uordblks);
SHOW(fordblks);
SHOW(keepcost);
return 0;
}
показывает различные значения, в зависимости от того, используете ли вы malloc
arena = 135168-0
ordblks = 1-1
smblks = 0-0
hblks = 1-0
hblkhd = 1003520-0
usmblks = 0-0
fsmblks = 0-0
uordblks = 656-0
fordblks = 134512-0
keepcost = 134512-0
или new
arena = 135168-135168
ordblks = 1-1
smblks = 0-0
hblks = 1-0
hblkhd = 4001792-0
usmblks = 0-0
fsmblks = 0-0
uordblks = 73376-73376
fordblks = 61792-61792
keepcost = 61792-61792
Похоже, что C ++ (Ubuntu, G CC 9.2.1) выполняет какое-то предварительное распределение, но соответствующее число, похоже, hblkhd
(на моей машине).
Поскольку ваше единственное динамическое распределение c находится в начале main, вы должны выполнить первое mallinfo
там. Тестирование только радикального кода сортировки показывает, что нет дополнительных динамических c выделений памяти.