Наблюдение увеличения размера кучи при выделении данных с использованием proc / pid / status в Linux для процесса

Я создал простую программу, которая распределяет целочисленный массив в куче / свободном хранилище каждый раз, когда пользователь нажимает «ввод». Моей конечной целью было увидеть изменение размера кучи памяти при каждом новом выделении. Я делаю это, проверяя файл состояния, чтобы увидеть изменение размера памяти кучи. К сожалению, при каждом выделении файл состояния не обновляется. Похоже, что единственный способ получить файл для обновления — это спамить программу с кучей возвратов каретки, а затем она обновляется. Почему это делает это? Мне нужен надежный метод для определения диапазона памяти, который мои программы занимают из динамического распределения, когда я работаю над встроенной системой. Может ли кто-нибудь предоставить какие-либо сведения о состоянии / proc // или другой метод определения размера кучи памяти?

Кроме того, статус предоставляет память в килобайтах, было бы неплохо увидеть эту информацию с большей детализацией в байтах — есть ли способ сделать это? Спасибо.

Вот пример программы того, что я сделал:

#include <cstddef>
#include <iostream>

int keepLooping()
{
return 1;
}

int main (int argc, char* argv[])
{
int exit_code = 0;
int fd = -1;

do
{
do
{
std::cout << '\n' << "Press a key to allocate data to the heap...";
} while (std::cin.get() != '\n');

int *someArray = new int[1000];

}
while (keepLooping());

return exit_code;
}

0

Решение

Реализации C ++ обычно не распределяют каждое динамическое выделение непосредственно из операционной системы, а скорее запрашивают целые страницы памяти (4 КБ по умолчанию в Linux) или более и распределяют меньшие выделения в процессе. Поэтому маловероятно, что операционная система сможет наблюдать небольшие изменения в использовании памяти процессом.

В некоторых системах, в частности, в Linux с определенной конфигурацией, распределение динамического хранилища не обязательно использует какие-либо системные ресурсы. Такие системы, которые за коммит память не видит каких-либо изменений в использовании физической памяти до тех пор, пока к выделенной памяти не будет получен доступ.

Есть инструменты профилирования памяти, такие как Valgrind который может использоваться для обертывания процесса и точного измерения использования памяти кучи на протяжении всего процесса.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]