|
2 / 2 / 0
Регистрация: 04.02.2013
Сообщений: 92
|
||||||||||||
Что считать утечкой памяти?20.06.2015, 16:05. Показов 3364. Ответов 65
Метки нет (Все метки)
0
|
||||||||||||
| 20.06.2015, 16:05 | |
|
Ответы с готовыми решениями:
65
Как бороться с утечкой памяти?
Как справиться с утечкой памяти в коде? |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 21.06.2015, 13:43 | |||
|
Кликните здесь для просмотра всего текста
можно много раз запускать хэлловорлд на выполнение. и ни разу не возникнет ситуации, когда приложение зажирает непойми какую память, не пойми куда.
0
|
|||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
| 21.06.2015, 14:07 | |
|
hoggy, Википедия не является авторитетным источником. Или назовите мне автора этого определения. А то оно стремное какое-то. То есть если я напишу демон, который вообще не будет освобождать память, и скажу, что он контролируемо сжирает всю память ОС за 2 часа, после чего я его рестарчу, то типа у меня в демоне утечек памяти нет? А может все-таки это говорит о том, что там дофига утечек, но просто я на них забил?
У нас в памяти есть объект, который оттуда нельзя удалить. Приложение само не освобождает память, в которой больше не нуждается для работы, а возлагает это на ОС. Поэтому в приложении - по определению это утечка. Осознанная или нет, допустимая или нет, - это уже другой вопрос. Если мы пишем продакшен-код, то нужно спрашивать себя - "есть ли тут реальная причина не освобождать память"? Если причины нету, то освобождать. Обратные вопросы типа "а можно ли тут не освобождать память" - показатели непрофессионализма, до добра не доводящие.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 21.06.2015, 14:27 | |||
|
и всех все устраивает. если требования изменятся, и нужно будет, что бы демон 7/24 крутился без рестартов, а он не может, потому что падает от нехватки памяти, и хрен что с этим поделаешь, без серьёзного рефактора, тогда это уже будет называться "утечки". вот вам другой пример: есть специальные аппараты, и софтина под них. требование к работе: утюг. воткнули в розетку - работает. выткнули - не работает. в каких то частых циклах память освобождается, как и должно быть по уму. но долгоживущие объекты, аля "звуковая подсистема" создаются, а на освобождение забивается. зачем? время жизни - до конца приложения. а выключение - дернуть шнур из розетки. однако, главный признак профессионализма - не делать то, что можно было бы не делать. то есть, не делать что-либо зазря. в случае с утюгом, требования изменились. и захотелось, что бы на одном аппарате было несколько софтин, и была возможность вызывать меню, с помощью которого можно было переключаться между ними. мои софтинки это спокойно перенесли, потому что я использовал смарт-поинтеры, и вручную память нигде не дергал. это к слову о продакшене. а вот если кто нибудь докалебется до хэлловорлда из 5 строк кода: так и хочется ответить: да идите в баню, оно вообще надо? писать дополнительный код, который не относится к иллюстрации момента, и никому нафиг не нужен.
0
|
|||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||
| 21.06.2015, 14:44 | ||
|
* Демон жрет память, мы это знаем, поэтому перезапускаем его каждые пару часов и радуемся. Утечек нет. * Забыли перезапустить демона вовремя - утечки есть. Так?
1
|
||
|
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
|
||
| 21.06.2015, 14:59 | ||
|
0
|
||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|||
| 21.06.2015, 15:18 | |||
|
hoggy, в статьях, документациях, инструментах обнаружения утечек, которые я видел, - везде это характеризуется как свойство именно кода, безотносительно каких-либо внешних требований. Можете привести ссылки какие-нибудь?
![]() Добавлено через 5 минут
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||
| 21.06.2015, 20:01 | |||||||||
|
потому что никто в здравом уме не будет сознательно писать настолько запредельный б_ы_д_л_о_к_о_д. но если бы нашелся настоящий ценитель: забыл бы перезапустить демона - поимел бы аварию сервиса. а не утечку. я вам приведу более реалестичный пример: допустим, есть некий движок для видео-игр:
заметьте: я не спрашиваю, есть ли тут утечка, я спрашиваю: теоретически вообще может ли здесь быть утечка? Кликните здесь для просмотра всего текста
нет здесь никаких утечек.
потому что, все подсистемы кроме звуковой зависят друг от друга. и если даже вылетит исключение при конструировании очередной из них, движок уже не сможет работать. что с того, что у нас там не отработают диструкторы отдельных полей класса в случае эксепшенов? что с того, что часть памяти зачистит система, а не оператор delete ? у нас в любом случае авария несовместимая с жизнью приложения. мы все равно ничего не можем сделать. ну поменяем мы сырые указатели на смартпоинтеры, ну позвали мы эти самые диструкторы. что дальше? в любом случае все, всё, что мы можем сделать в этой ситуации, это заллогировать происшествие, и тихо помереть. видео-игра без окна, без графики, без гуи функционировать все равно не сможет. но для логгирования нам звать диструкторы не нужно. мы это итак можем сделать. и уже не важно кто зачистит за приложением: система, или диструкторы классов. исход все равно один: это авария. а не утечка. так что здесь есть только два варианта: либо авария, и шандец всему. либо все отлично, играем, наслаждаемся жизнью. обратите внимание, что звуковая подсистема обернута в трай-кетч. без окна, графики жить нельзя. а без звуковой можно. поэтому для неё персонально exception-safe Добавлено через 8 минут вот вам очень простой способ: вы сознательно выбросили объекты, или вы их потеряли?
0
|
|||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 21.06.2015, 20:07 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 21.06.2015, 20:27 | |
|
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||||
| 21.06.2015, 22:17 | ||||||||
![]() Определение утечки памяти - одно единственное: отсутствие возможности освободить память объекта, доступ к которому невозможен. (Не знаю даже какой авторитетности должен быть источник, чтобы в это поверил наш неверующий Фома). Считать утечки существенными или нет - совершенно другой разговор (то, что пытается впарить нам hoggy). Важность утечки никоим образом не отменяет факта существования самой утечки. Если вдруг возникло какое-то сомнение - запусти профайлер, заточенный на поиск утечек и посмотри, что он будет говорить например для такого кода (с delete и без):
Вариант вывода valgrind'а:
0
|
||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 21.06.2015, 22:22 | ||
|
потому что везде пишут: неконтролируемая утеря ресурса.
0
|
||
| 21.06.2015, 22:23 | |
|
Не по теме: Tulosba, я что-то не понял, они всё-таки добавили кнопку "Выделить код", или я неосознанно скрипт установил?
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 21.06.2015, 22:24 | ||
|
правда настроил так, что бы он не агрился на эту переменную. и блин... молчит, зараза. или вот: запилил сингелтон, который майн пережил - сагрилсо! вот не нада вот такую туфту прогонять. я аппелирую к здравому смыслу. вы - к форме, не учитывая содержание.
0
|
||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||
| 21.06.2015, 22:31 | ||
|
Контроль подразумевает возможность что-то сделать (освободить память в данном случае), а возможности этой нет на уровне языка. И не надо тут про ОС повторять. ОС это уже другой уровень, которого, как я раньше говорил, может и вовсе не быть.
0
|
||
| 21.06.2015, 22:34 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 21.06.2015, 22:39 | ||||||
|
ключевое слово "забытый". обратите внимание: и потом, на то оно и контролируемое, что программист в курсе. так что даже если теоретически нужно будет портануться на какие нибудь микроволноффки - проблем не вызовет.
0
|
||||||
| 21.06.2015, 22:39 | |
|
Помогаю со студенческими работами здесь
40
Является ли данный случай утечкой памяти? Когда исправят баг с утечкой памяти в Rhythmbox?
Как бороться с утечкой памяти в приложении при его длительной работе Считать изображения из памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча
Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове.
Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
|
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
|
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера»
Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит.
Придуман Биллом Госпером в 1970-х, опубликован в. . .
|
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb">
<style>
<!]>
</ style>
<g id="bush">
</ g>
</ svg>
function fn(){
let rost;/ / высота древа
let xx=165,yy=210,w=256;
|
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|