Это под Unix / Linux?Если это так, вы можете вычислить разницу между значениями, возвращаемыми sbrk (0) в начале и в конце вашей программы.Это даст общий объем памяти кучи во время выполнения.
См. Страницу руководства в sbrk (2)." Вызов sbrk () с шагом 0 может использоваться для определения текущего местоположения остановки программы. "
(приложение) Использование игрушечной программы C ++, которая просто выделяет один большой векторполучается, что среда выполнения GNU C ++ имеет тенденцию выделять очень большие объекты с помощью mmap (), а не sbrk ().
Использование strace:
$ strace ./vec1.x |& grep map
...
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4ac2b42000
mmap(NULL, 800002048, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4a93051000
...
$
Вы также можете выполнить grep с помощью brk вместо map .
Использование Valgrind:
$ valgrind ./sbrk1.x
...
==22223== total heap usage: 3 allocs, 3 frees, 800,073,728 bytes allocated
....
$
Надеюсь, это поможет!