Утечка - память - Большая Энциклопедия Нефти и Газа, статья, страница 2
Вам помочь или не мешать? Законы Мерфи (еще...)

Утечка - память

Cтраница 2


В этой реализации АТД для полиномов представление данных состоит из степени и указателя на массив коэффициентов. Это не АТД первого класса: клиентские программы должны знать, что возможна утечка памяти, а семантика копирования заключается в копировании указателей ( см. упр.  [16]

Если нет особой нужды, не стоит вмешиваться в работу диспетчера памяти, изменяя работу механизма выделения памяти. Такая необходимость возникает при желании проверки правильной работы распределителя памяти, то есть проверки отсутствия утечки памяти в программе. Например, можно перекрыть методы Newlnstance и Freelnstance для возможности подсчета количества создаваемых и уничтожаемых объектов этого класса и проверки, что в итоге получается ноль.  [17]

Еще хуже обстоят дела, когда объект класса QUEUE выходит за пределы видимости: система освобождает память, относящуюся к указателям, но не всю память, занимаемую собственно связным списком. Действительно, как только указатели прекращают свое существование, исчезает возможность доступа к данной области памяти. Вот вам пример утечки памяти ( memory leak) - серьезной проблемы, всегда требующей особого внимания во время написании программы, которая имеет дело с распределением памяти.  [18]

Безусловно, и многие программисты на C используют исключения именно в этих целях. Но следует помнить, что прохождение исключения по стеку вызовов может оказаться не таким уж безопасным. Так, если объект был создан в области динамического обмена, а потом удален в стеке вызовов, это может привести к утечке памяти.  [19]

В принципе, при наличии ссылок, выделяемые массивы и не были бы нужны; но ссылки, кроме способности занимать память динамически, обладают рядом свойств, которые нельзя не учитывать. Оператор ALLOCATE выделяет ссылке нового адресата даже в том случае, когда она прикреплена к другому адресату. Если предыдущий адресат был создан также оператором ALLOCATE и не имеет других прикрепленных к нему ссылок, он становится недоступен - так может возникнуть утечка памяти.  [20]

До сих пор все было гладко. Но как же теперь освободить эту область памяти, которая больше не нужна. При этом и память будет освобождена, и условия для утечки памяти будут ликвидированы. Как указывалось выше, ссылка всегда должна оставаться псевдонимом реального объекта; если же она ссылается на нулевой объект ( как в данном случае), о корректности программы говорить нельзя.  [21]

Утечка памяти - это трудно выявляемый дефект, который словно чума поражает многие большие системы. Хотя освобождение памяти, занятой некоторым объектом, обычно является делом, в принципе, простым, на практике очень тяжело быть уверенным в том, что удалось отыскать все вплоть до последней распределенной области памяти. Механизм деструкторов в языке C полезен, однако система не может гарантировать, что обход структур данных совершен так, как задумывалось. Когда объект прекращает свое существование, его указатели теряются безвозвратно, и любой указатель, оставленный без внимания деструктором, потенциально ведет к утечке памяти.  [22]

Если вы не используете DLL, то при одновременном запуске нескольких программ в память будут загружены одинаковые фрагменты кода. Вы перерасходуете системные ресурсы, поскольку каждая программа загружает свою копию одного и того же кода. Он будет использоваться всеми вашими приложениями, и тем самым утечка памяти в системе будет уменьшена.  [23]

Когда память, выделенная под переменную, больше не нужна, ее следует освободить. Делается это с помощью оператора delete, после которого записывается имя указателя. Оператор delete освобождает область памяти, определенную указателем. Необходимо помнить, что указатель, в отличие от области памяти, на которую он указывает, является локальной переменной. Поэтому после выхода из функции, в которой он был объявлен, этот указатель станет недоступным. Однако область памяти, выделенная оператором new, на которую сослался указатель, при этом не освобождается. Программисты называют такую ситуацию утечкой памяти. Такое название полностью соответствует действительности, поскольку до завершения работы программы эту память использовать нельзя, она как бы вытекает из вашего компьютера.  [24]



Страницы:      1    2