Встречаете ли вы утечки памяти в популярных либах?
От: Shmj Ниоткуда  
Дата: 28.04.23 08:00
Оценка: -1 :)
Такой вопрос.

Есть опенсорсный проект с 3500 форками, сотнями звезд. И смотрю — банально автор в нескольких местах забывает чистить память (при вызове extern "C" — функций из другого языка). Причем и С++ либу и верхнего уровня проект — делает один и тот же автор, то есть понимает как работает на всех уровнях.

Я о чем. Вроде чел., который осилил такой проект и делал несколько лет (ладно я дурак же) — должен довести до автоматизма работу с памятью. Но почему этого не произошло?

И вопрос такой — как вы не забываете и 100% знаете что нигде не забыли убрать за собой?
Отредактировано 28.04.2023 8:02 Shmj . Предыдущая версия .
Re: Встречаете ли вы утечки памяти в популярных либах?
От: DiPaolo Россия  
Дата: 28.04.23 08:16
Оценка: 1 (1) +1
S>Есть опенсорсный проект с 3500 форками, сотнями звезд. И смотрю — банально автор в нескольких местах забывает чистить память (при вызове extern "C" — функций из другого языка). Причем и С++ либу и верхнего уровня проект — делает один и тот же автор, то есть понимает как работает на всех уровнях.

S>Я о чем. Вроде чел., который осилил такой проект и делал несколько лет (ладно я дурак же) — должен довести до автоматизма работу с памятью. Но почему этого не произошло?


Лучш разбираться предметно. Просто дай ссылку на строки кода, которые тебе показались с утечками (ГитХаб умеет давать ссылки прямо на строки). Возможно, ты не так понял. А может и правда утечки.

S>И вопрос такой — как вы не забываете и 100% знаете что нигде не забыли убрать за собой?


При написании операции выделения памяти сразу же пишу обратную операцию + удостовериться, что она вызывается (либо самому, либо передача ответственности за чистку вызывающему коду).
Патриот здравого смысла
Re: Встречаете ли вы утечки памяти в популярных либах?
От: ononim  
Дата: 28.04.23 08:16
Оценка:
S>Есть опенсорсный проект с 3500 форками, сотнями звезд.
Сотни звезд это немного.

S>И смотрю — банально автор в нескольких местах забывает чистить память (при вызове extern "C" — функций из другого языка).

ССылку на код в студию.
Как много веселых ребят, и все делают велосипед...
Re: Встречаете ли вы утечки памяти в популярных либах?
От: student__  
Дата: 28.04.23 08:49
Оценка:
Здравствуйте, Shmj, Вы писали:

S>И вопрос такой — как вы не забываете и 100% знаете что нигде не забыли убрать за собой?


Никак. И никто в нетривиальных проектах 100% этого не знает. И весь прогресс в автоматическом управлении памятью, начиная с LISP, направлен на то, чтобы такой ерундой не заниматься.
Оправдана она только в тех областях, где не может быть никакой контролирующей среды кроме железа, или там, где накладные расходы на автоматическое управление памятью или непредсказуемость отклика создают больше проблем, чем ошибка программиста в ручном управлении памятью.
Re: Встречаете ли вы утечки памяти в популярных либах?
От: student__  
Дата: 28.04.23 09:03
Оценка:
Здравствуйте, Shmj, Вы писали:
S>Есть опенсорсный проект с 3500 форками, сотнями звезд.

Это не признак качества, а только высокой популярности.
Я недавно поддерживал одно ПО, в котором искали проблему, причем, это был код для приложения для SecureOS, и никакие стандартные инструменты типа valgrind были недоступны.
А с другой стороны, было много зависимостей от драйверов и кастомного окружения, так что проверить поведение приложения в песочнице на x86 не представлялось возможным.
Так вот, тимлид, который разрабатывал это ПО вместе с командой из другой страны, рассматривая код своих бывших коллег (они сделали работу, и ушли на другие хлеба) вдруг понял, что временный ресурс, который выделяется в куче при выполнении операции позапросу из RichOS, не освобождается, и налицо явная утечка памяти. Видимо, особенно никто не ревьюил тот код, и никого не волновала утечка, потому что все работало и так.
А потом перестало.

И это не фор-фан опенсорс, и не контора-однодневка, а вполне себе корпа с историей.
Re: Встречаете ли вы утечки памяти в популярных либах?
От: Zhendos  
Дата: 28.04.23 09:10
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Такой вопрос.


Конечно, например в Qt: https://bugreports.qt.io/browse/QTBUG-88807
Re[2]: Встречаете ли вы утечки памяти в популярных либах?
От: PM  
Дата: 28.04.23 09:52
Оценка: :)
Здравствуйте, student__, Вы писали:

__>Видимо, особенно никто не ревьюил тот код, и никого не волновала утечка, потому что все работало и так.

__>А потом перестало.
...
__>И это не фор-фан опенсорс, и не контора-однодневка, а вполне себе корпа с историей.

Хехе, может быть так и было задумано, иметь null garbage collector как в этой истории: https://devblogs.microsoft.com/oldnewthing/20180228-00/?p=98125

This sparked an interesting memory for me. I was once working with a
customer who was producing on-board software for a missile. In my analysis
of the code, I pointed out that they had a number of problems with storage
leaks. Imagine my surprise when the customers chief software engineer said
"Of course it leaks". He went on to point out that they had calculated the
amount of memory the application would leak in the total possible flight time
for the missile and then doubled that number. They added this much
additional memory to the hardware to "support" the leaks. Since the missile
will explode when it hits its target or at the end of its flight, the
ultimate in garbage collection is performed without programmer intervention.

Re: Встречаете ли вы утечки памяти в популярных либах?
От: rg45 СССР  
Дата: 28.04.23 11:12
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>И вопрос такой — как вы не забываете и 100% знаете что нигде не забыли убрать за собой?


RAII
--
Re: Встречаете ли вы утечки памяти в популярных либах?
От: koenjihyakkei Россия  
Дата: 28.04.23 11:14
Оценка:
Здравствуйте, Shmj, Вы писали:

KDE Plasma течет после долгой работы, пофиксить до сих пор не могут, потому что плохо воспроизводится.
У меня начинает течь plasmashell после 2-х недель работы десктопа, приходится перезагружать.

Подробнее тут https://bugs.kde.org/show_bug.cgi?id=403563
Re: Встречаете ли вы утечки памяти в популярных либах?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 28.04.23 11:34
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Есть опенсорсный проект с 3500 форками, сотнями звезд. И смотрю — банально автор в нескольких местах забывает чистить память (при вызове extern "C" — функций из другого языка). Причем и С++ либу и верхнего уровня проект — делает один и тот же автор, то есть понимает как работает на всех уровнях.


Не показатель.

S>Я о чем. Вроде чел., который осилил такой проект и делал несколько лет (ладно я дурак же) — должен довести до автоматизма работу с памятью. Но почему этого не произошло?


Есть куча причин. Разработка на С++ с высоким уровнем контроля — медленное и дорогое удовольствие.

S>И вопрос такой — как вы не забываете и 100% знаете что нигде не забыли убрать за собой?


Code review, автоматический запуск тестов, статического анализатора, санитайзеров, valgrind, долгое нагрузочное тестирование.
Re[2]: Встречаете ли вы утечки памяти в популярных либах?
От: student__  
Дата: 28.04.23 13:10
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Есть куча причин. Разработка на С++ с высоким уровнем контроля — медленное и дорогое удовольствие.


При этом C++ не гарантирует отсутствия утечек памяти. Т.е. даже если человек знает, как писать на C++ (а не на C с классами), он все равно может наступить на грабли.
Re[3]: Встречаете ли вы утечки памяти в популярных либах?
От: student__  
Дата: 28.04.23 13:22
Оценка:
Здравствуйте, PM, Вы писали:

PM>Хехе, может быть так и было задумано, иметь null garbage collector как в этой истории: https://devblogs.microsoft.com/oldnewthing/20180228-00/?p=98125


Нет, потому что в других местах память таки освобождалась явно.
Максимум, что могло иметь место быть — писавший код человек принял волюнтаристское решение, что памяти выделяется очень мало, так что пес с ней, но нигде не дал намек в коде (комментарий) о своем решении.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.