Книга: The Programmers
Детекторы утечки памяти
Детекторы утечки памяти
На рынке имеется ряд продуктов, которые на основе различных стратегий обнаруживают утечки памяти в приложениях. Утечка памяти — это то, что случается, когда программа запрашивает блок памяти из кучи (используя, например, malloc() в Cи под UNIX или DOS, или оператор new в C++), а затем забывает вернуть его обратно по своему завершению. Иногда это приводит к нарушению работы других процессов, работающих на той же платформе, поскольку некоторые операционные системы позволяют одному процессу захватить всю имеющуюся память системы и файл подкачки.
Даже если операционная система достаточно разумна, чтобы ограничить выделяемую отдельному процессу память, приложение может вскоре исчерпать свою квоту, что обычно заканчивается сбоем с точки зрения пользователя.
Поэтому утечки памяти — это Плохая Вещь.
Это причина того, почему люди продают, и покупают, детекторы утечки памяти. Неприятность в том, что утечки — это симптом проблемы, а не причина проблемы. Не так трудно вызвать free() или удалить объекты, которые больше не нужны. Применение delete к коллекции указателей на активные объекты — вот опасное занятие, как и перезаписывание их адресов. Что если эти объекты, скажем, зарегистрировали функции обратного вызова (callbacks) в GUI? Как же их освободить? Деструкторы вне контроля — это программист вне контроля. Если программист не может продемонстрировать контроль над объектами, которого достаточно для избежания утечек памяти, то как мы можем думать, что правильно еще хоть что-нибудь?
Концептуальная целостность — это одна из самых сильных подпорок в сохранении контроля над объектами. Полезное общее правило (хотя, как и все правила, не всегда применимое) должно говорить, что уровень, который конструирует модуль, должен отвечать за его уничтожение. Это, по крайней мере, фокусирует внимание на жизненном цикле объектов, а не на всего лишь нескольких аспектах их поведения, которые можно проследить на диаграммах использования.
- Простая и надежная среда
- Типы систем
- Обработка ошибок — лимфатическая система программы
- Увлечение формой (а не содержанием) и комбинаторный взрыв
- Избегайте избыточности представления
- Посмотри на состояние всего этого!
- Реальность системы как объекта
- Детекторы утечки памяти
- Таймауты
- Проектируй для тестирования
- Даты, деньги, единицы измерения и проблема Y2K
- Безопасность
- 3.2.1.2. Начальное выделение памяти: malloc()
- Неисправности оперативной памяти
- Как работает модуль оперативной памяти
- Описание типов модулей оперативной памяти
- Извлечение и установка модулей памяти
- Характеристики модулей памяти
- ПО для диагностики оперативной памяти
- Поиск и устранение неисправностей модулей памяти
- 2.3.6. Задание объектов физической памяти
- Как узнать, какая у меня видеокарта, процессор и сколько памяти?
- На компьютере катастрофически не хватает памяти. Как ее освободить?
- Появляется сообщение об ошибке Недостаточно виртуальной памяти, файл подкачки отсутствует или слишком мал. Что делать?