Обнаружение утечки памяти - PullRequest
1 голос
/ 02 марта 2011

Кто-нибудь знает общий алгоритм для обнаружения утечки памяти?

Ответы [ 5 ]

6 голосов
/ 02 марта 2011

Анализ утечек памяти по противоречиям

http://www.cs.cornell.edu/~rugina/papers/sas06.pdf

И менее актуально ...

В документах Apple dev также есть статья по этой теме (конкретная) ...

http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/FindingLeaks.html

и отслеживание использования памяти в целом (также специфично) ...

http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/FindingPatterns.html#//apple_ref/doc/uid/20001882-CJBJFIDD

2 голосов
/ 02 марта 2011

Самый простой способ - иметь счетчик для каждого типа объекта, который есть в вашем приложении.При выделении объекта увеличивайте счетчик, при выделении уменьшайте его.Когда приложение завершает работу, убедитесь, что все счетчики равны нулю.

1 голос
/ 02 марта 2011

Хотя это не алгоритм, существует множество сторонних инструментов, которые также помогут проанализировать ваш код на предмет утечек памяти. В зависимости от размера вашего проекта, может быть неразумно вручную отслеживать все выделения.

Лично мне нравится использовать valgrind, если я нахожусь в * nix окружении.

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

К сожалению, рост не обязательно означает утечку, может быть, вашей программе требуется ОЧЕНЬ много памяти.

0 голосов
/ 29 августа 2015

Привет, это способ обнаружения утечки памяти в директивах препроцессора кода, включающий эти операторы

 # define _CRTDbg_Map_Alloc

 # include<stdlib.h>

 # include<crtdbg.h>

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

_CrtDumpMemoryLeaks();
0 голосов
/ 16 ноября 2011

Если вы используете Windows, вам нужен deleteaker. Если вы используете * nix, попробуйте valgrind.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...