C ++: «Следить» за использованием операторов «new», «delete» - PullRequest
2 голосов
/ 10 февраля 2011

Я бы хотел отследить, когда и сколько памяти выделено в моей программе, и распечатать ее для отладки при определенных обстоятельствах!

  • Как распечатать сообщение с выделеннымобъем памяти каждый раз, когда new используется для выделения памяти в моей программе?

Ответы [ 4 ]

4 голосов
/ 10 февраля 2011

Отличным способом устранения проблем с памятью является использование внешнего монитора, такого как valgrind . Это подключит к распределению памяти и освобождению вашей программы, и распечатает отчет в конце вашей программы, показывающий любые распределения, которые вы не освободили Этот метод не требует модификации или перекомпиляции вашей программы.

3 голосов
/ 10 февраля 2011

Вы можете перегрузить новые и удалить операторы.См. эту статью .

2 голосов
/ 10 февраля 2011

Вы можете использовать malloc hooks , чтобы сделать это, если вы используете библиотеку GNU glibc, что было бы лучшим способом сделать это, чем перегрузка new / delete, если вы хотите захватить все выделения внутри вашего программа. Если вы просто хотите захватить выделения, используя new / delete, вы можете перегрузить эти операторы.

Кстати, если вы пытаетесь обнаружить и отладить проблемы с памятью, тогда вместо того, чтобы перекатывать свою собственную систему, вы, вероятно, выиграете от использования valgrind с memcheck .

0 голосов
/ 10 февраля 2011

Если ваше приложение действительно простое, вы можете попробовать это.В противном случае используйте valgrind, как предлагали другие.

int sum = 0;

class foo
{
    int a,b,c;
};   

int main()
{
    foo *obj1 = new foo;

    sum += sizeof(*obj1); // 12 bytes

    foo *obj2 = new foo;

    sum += sizeof(*obj2); // 24 bytes

    std::cout << " \n Total memory allocated with new:\t " << sum << std::endl ;
    return 0;
}
...