LINUX.ORG.RU

Методы контроля динамической памяти для C++


0

0

В Advanced Linux Programming есть раздел посвещённый проблемам тестирования динамической памяти в программах на С.
Из этих методов можно отметить:
 mtrace
 ccmalloc library
 electric fence library

Как сказано там же, все эти методы не покрывают всего спектра проблем.
И ещё - их нельзя совмещать.

Есть ли более мощные средства? 
Особенно с заточкой под C++, а не под C.

Не использовать new и delete, что кстати элементарно сдлеать, вот и весь контроль.

anonymous
()
Ответ на: комментарий от anonymous

> Не использовать new и delete, что кстати элементарно сдлеать, вот и весь контроль.

Как интересно, Valgrind! А подробнее? ;)

hbee ★★★★
()

Для Linux есть отличная вещь под названием valgrind. Не требует специальной сборки с библиотеками типа e-fence, при этом покрывает существенно больший спектр потенциальных проблем, чем утечки динамической памяти. Valgrind следит, скажем, за чтением неинициализированных переменных, и т.п. Если вам приходилось сталкиваться с Rational Purify - вы знаете, что он умеет; так вот - Valgrind почти так же хорош как и Purify. "Заточка под C++" также имеется. Недостатком является то, что исполнение кода в этих инструментах (по крайней мере частично) эмулируется. Это приводит к существенному снижению производительности.

А так можно посоветовать - по крайней мере в новых проектах - по возможности использовать std::auto_ptr и, например, boost::shared_ptr. Систематическое применение этих средств при разработке позволяет забыть о том, что в C++ можно написать код, в котором течет память.

anonymous
()
Ответ на: комментарий от hbee

> А подробнее?

shared_ptr, auto_ptr, vector и т.д. и т.п.

за вас выделят память за вас ее освободят,

в вашей программе, вызовов new минимум, delete не одного, а память освобождается как часы.

anonymous
()
Ответ на: комментарий от anonymous

> shared_ptr, auto_ptr, vector и т.д. и т.п.

А, понятно, а то я уж за стек испугался ;)

hbee ★★★★
()

> Есть ли более мощные средства?

Самое же мощное средство - хороший язык с GC ;)

hbee ★★★★
()
Ответ на: комментарий от anonymous

В perl GC неправильный - циклические ссылки не разруливает.

anonymous
()
Ответ на: комментарий от anonymous

Ну поставил я ВАШ СУПЕРСКИЙ VALGRIND
а он падает по segmaentation fault!!!
При запуске без параметров !!!

kri
() автор топика
Ответ на: комментарий от kri

не повезло чувак. не будет у тебя нашего суперского валгринда. будешь обделенным.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.