Лучшее определение утечки памяти [закрывается]

все ответы верны, но я хочу упомянуть, что дельта времени принимает отрицательные аргументы.

>>> from datetime import date, timedelta
>>> yesterday = date.today() + timedelta(days=-1)
>>> print(yesterday.strftime('%m%d%y')) #for python2 remove parentheses 
43
задан andrewrk 23 November 2008 в 17:44
поделиться

11 ответов

Существует два определения (по крайней мере, для меня):

Наивное определение: Отказ к выпуску , недостижимому память, которая больше не может выделяться снова никаким процессом во время выполнения процесса выделения. Это может главным образом быть исправлено при помощи GC (Сборка "мусора") методы или обнаружено автоматизированными инструментами.

Тонкое определение: Отказ к выпуску , достижимому память, которая больше не необходима для Вашей программы для функционирования правильно. Это почти невозможно обнаружить с автоматизированными инструментами или программистами, которые не знакомы с кодом. В то время как технически это не утечка, это имеет те же последствия как наивный. Это не моя собственная идея только. Можно столкнуться с проектами, которые записаны на собравшем "мусор" языке, но все еще упоминают, что фиксировали утечки памяти в их журналах изменений.

45
ответ дан Ben 23 September 2019 в 12:43
поделиться

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

25
ответ дан truppo 23 September 2019 в 12:43
поделиться

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

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

5
ответ дан Joseph Ferris 23 September 2019 в 12:43
поделиться

Определение : Отказ освободить память после выделения.

6
ответ дан dtell 23 September 2019 в 12:43
поделиться

w:

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

2
ответ дан Eugene Yokota 23 September 2019 в 12:43
поделиться

Память, которая не освобождена, когда она больше не необходима, и больше не "достижимо". Например, в неуправляемом коде, если я использую "новый" для инстанцирования объекта, но я не использую, "удаляют", когда я сделан с ним (и мой указатель вышел из объема или чего-то).

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

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

1
ответ дан Matthew Groves 23 September 2019 в 12:43
поделиться

Утечка памяти : Сбой к свободной памяти, в которой Вы больше не нуждаетесь прежде также:

  • программа завершается
  • , Дополнительная память выделяется

Лучший способ предотвратить Утечки памяти : Свободная память, как только это больше не необходимо.

1
ответ дан Robert Gamble 23 September 2019 в 12:43
поделиться

Вот некоторые методы для предотвращения / обнаруживающий утечки памяти:

  1. Рассматривают Ваш алгоритм с точки зрения потребления памяти. Другие респонденты упомянули то, что Вы не должны терять указатель на выделенный объект для утечки памяти. Даже если Ваша реализация содержит нулевые ошибки указателя, можно все еще эффективно пропустить память, если Вы держите на выделенные объекты после фактической необходимости в них.

  2. Профиль Ваше приложение. можно использовать инструменты отладчика памяти как Valgrind или Purify для нахождения утечек.

  3. Тестирование методом "черного ящика". Часы, что происходит с Вашим скомпилированным кодом после того, как Вы подадите его большие наборы данных или позволите ему работать в течение долгих промежутков времени. Посмотрите, имеет ли его объем потребляемой памяти тенденцию вырасти без предела.

1
ответ дан mseery 23 September 2019 в 12:43
поделиться

Существует два способа, которыми может быть определена утечка памяти.

Первый, если данные не освобождены, когда больше нет, имеет любые ссылки на него, те данные недостижимы (если Вы не имеете некоторый поврежденный указатель или читаете мимо данных в буфере или чем-то). В основном, если Вы не освобождаете/удаляете данные, выделенные на "куче", это становится неприменимым и просто тратит впустую память.

могут быть случаи, где указатель потерян, но данные все еще доступны. Например, если Вы храните указатель в интервале или храните смещение к указателю (использующий адресную арифметику с указателями), можно все еще вернуть исходный указатель.

В этом первом определении, данные обрабатываются сборщиками "мусора", которые отслеживают количество ссылок на данные.

114-секундный, память по существу пропущена, если она не освобождена/удалена когда в последний раз используемый. На это можно сослаться, и сразу свободно-способное, но ошибка была сделана, чтобы не сделать так. Может быть допустимая причина (например, в случае, где деструктор имеет некоторый странный побочный эффект), но это указывает на плохое проектирование программы (по-моему).

Этот второй тип памяти, просачивающейся часто, происходит при записи небольших программ, которые используют файл IO. Вы открываете файл, пишете Ваши данные, но не закрываете его, как только Вы сделаны. ФАЙЛ* может все еще быть в объеме, и легко closeable. Снова, может быть некоторая причина того, чтобы сделать это (такие как блокировка доступа для записи другими программами), но мне это - флаг плохого дизайна.

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

1
ответ дан Robert Gamble 23 September 2019 в 12:43
поделиться

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

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

"сбоем к свободному, когда сделано с ним" стандарт это считали бы утечкой, и я видел, что инструменты создания отчетов утечки называют такие вещи утечками, поскольку память все еще использовалась. (И на самом деле код не может содержать код, способный к чистке объекта.)

Однако я встретился с кодом этой природы в библиотеках компилятора прежде, даже когда стоимость воссоздания объекта не весь настолько большая.

Утечка или нет?

1
ответ дан Loren Pechtel 23 September 2019 в 12:43
поделиться

редактирование: Этот ответ является неправильным. Я оставляю на виду его как пример того, как легкий это должно быть ошибочно о чем-то, что Вы думаете, что знаете очень хорошо. Спасибо всем, кто указал на мою ошибку.

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

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

-5
ответ дан 2 revs 23 September 2019 в 12:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: