Перечислять выделенные объекты

Как мне перечислить все выделенные объекты (выделенные оператором new) (не только те, которые имеют свои собственные отображения памяти, но и те, которые тоже находятся в куче?) В C ++?

Мне нужно это, чтобы найти утечки памяти.

Платформа: Linux, gcc, i386, AMD_K64 (лучше: независимость от платформы)

Официального пути не может быть, но может быть и обходной путь.
Например, есть ли какая-то внутренняя переменная, к которой вы можете получить доступ? Может быть, указатель на список, используемый для управления кучей?

0

Решение

Вы всегда можете использовать valgrind для проверки утечек памяти. Либо установите его с вашим менеджером пакетов, либо просто скачайте и скомпилируйте из: http://valgrind.org/

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

0

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

Ты можешь использовать Valgrind он делает именно то, что вы хотите (заменяет malloc своей собственной реализацией) и считает выделения / выпуски

0

Есть потенциально две формы потери памяти

  1. Память, которая была выделена, но на нее больше нет ссылок из любого места … и поэтому удалить ее будет невозможно. Это правильная утечка. В Linux основным инструментом выбора является Valgrind. Valgrind — это фреймворк для нескольких инструментов. Инструмент, который вы хотели бы получить MemCheck…. Это инструмент динамического анализа, который будет сообщать о утечках и других проблемах с памятью. Это идет дальше, чем перечисление выделенной памяти, но также необходимо проверить, на нее все еще ссылаются или нет.
  2. Память, которая была выделена и на которую все еще ссылаются, но почему-то вы забыли об этом (например, векторы, которые бесконечно растут, потому что никто никогда не удаляет из них). Это где вам нужен инструмент, чтобы сказать вам состав всей памяти, которую вы выделили. Снова Валгринд может помочь вам здесь. Инструмент на этот раз называется массив

Я уверен, что есть еще инструменты. Это довольно популярно.

В Solaris я бы рекомендовал libumem для отслеживания утечек и анализатор в Sun Studio для профилирования и анализа памяти.

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