Есть опенсорсный проект с 3500 форками, сотнями звезд. И смотрю — банально автор в нескольких местах забывает чистить память (при вызове extern "C" — функций из другого языка). Причем и С++ либу и верхнего уровня проект — делает один и тот же автор, то есть понимает как работает на всех уровнях.
Я о чем. Вроде чел., который осилил такой проект и делал несколько лет (ладно я дурак же) — должен довести до автоматизма работу с памятью. Но почему этого не произошло?
И вопрос такой — как вы не забываете и 100% знаете что нигде не забыли убрать за собой?
S>Есть опенсорсный проект с 3500 форками, сотнями звезд. И смотрю — банально автор в нескольких местах забывает чистить память (при вызове extern "C" — функций из другого языка). Причем и С++ либу и верхнего уровня проект — делает один и тот же автор, то есть понимает как работает на всех уровнях.
S>Я о чем. Вроде чел., который осилил такой проект и делал несколько лет (ладно я дурак же) — должен довести до автоматизма работу с памятью. Но почему этого не произошло?
Лучш разбираться предметно. Просто дай ссылку на строки кода, которые тебе показались с утечками (ГитХаб умеет давать ссылки прямо на строки). Возможно, ты не так понял. А может и правда утечки.
S>И вопрос такой — как вы не забываете и 100% знаете что нигде не забыли убрать за собой?
При написании операции выделения памяти сразу же пишу обратную операцию + удостовериться, что она вызывается (либо самому, либо передача ответственности за чистку вызывающему коду).
Патриот здравого смысла
Re: Встречаете ли вы утечки памяти в популярных либах?
S>Есть опенсорсный проект с 3500 форками, сотнями звезд.
Сотни звезд это немного.
S>И смотрю — банально автор в нескольких местах забывает чистить память (при вызове extern "C" — функций из другого языка).
ССылку на код в студию.
Как много веселых ребят, и все делают велосипед...
Re: Встречаете ли вы утечки памяти в популярных либах?
Здравствуйте, Shmj, Вы писали:
S>И вопрос такой — как вы не забываете и 100% знаете что нигде не забыли убрать за собой?
Никак. И никто в нетривиальных проектах 100% этого не знает. И весь прогресс в автоматическом управлении памятью, начиная с LISP, направлен на то, чтобы такой ерундой не заниматься.
Оправдана она только в тех областях, где не может быть никакой контролирующей среды кроме железа, или там, где накладные расходы на автоматическое управление памятью или непредсказуемость отклика создают больше проблем, чем ошибка программиста в ручном управлении памятью.
Re: Встречаете ли вы утечки памяти в популярных либах?
Здравствуйте, Shmj, Вы писали: S>Есть опенсорсный проект с 3500 форками, сотнями звезд.
Это не признак качества, а только высокой популярности.
Я недавно поддерживал одно ПО, в котором искали проблему, причем, это был код для приложения для SecureOS, и никакие стандартные инструменты типа valgrind были недоступны.
А с другой стороны, было много зависимостей от драйверов и кастомного окружения, так что проверить поведение приложения в песочнице на x86 не представлялось возможным.
Так вот, тимлид, который разрабатывал это ПО вместе с командой из другой страны, рассматривая код своих бывших коллег (они сделали работу, и ушли на другие хлеба) вдруг понял, что временный ресурс, который выделяется в куче при выполнении операции позапросу из RichOS, не освобождается, и налицо явная утечка памяти. Видимо, особенно никто не ревьюил тот код, и никого не волновала утечка, потому что все работало и так.
А потом перестало.
И это не фор-фан опенсорс, и не контора-однодневка, а вполне себе корпа с историей.
Re: Встречаете ли вы утечки памяти в популярных либах?
Здравствуйте, student__, Вы писали:
__>Видимо, особенно никто не ревьюил тот код, и никого не волновала утечка, потому что все работало и так. __>А потом перестало.
... __>И это не фор-фан опенсорс, и не контора-однодневка, а вполне себе корпа с историей.
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: Встречаете ли вы утечки памяти в популярных либах?
KDE Plasma течет после долгой работы, пофиксить до сих пор не могут, потому что плохо воспроизводится.
У меня начинает течь plasmashell после 2-х недель работы десктопа, приходится перезагружать.
Здравствуйте, Shmj, Вы писали:
S>Есть опенсорсный проект с 3500 форками, сотнями звезд. И смотрю — банально автор в нескольких местах забывает чистить память (при вызове extern "C" — функций из другого языка). Причем и С++ либу и верхнего уровня проект — делает один и тот же автор, то есть понимает как работает на всех уровнях.
Не показатель.
S>Я о чем. Вроде чел., который осилил такой проект и делал несколько лет (ладно я дурак же) — должен довести до автоматизма работу с памятью. Но почему этого не произошло?
Есть куча причин. Разработка на С++ с высоким уровнем контроля — медленное и дорогое удовольствие.
S>И вопрос такой — как вы не забываете и 100% знаете что нигде не забыли убрать за собой?
Здравствуйте, Nuzhny, Вы писали:
N>Есть куча причин. Разработка на С++ с высоким уровнем контроля — медленное и дорогое удовольствие.
При этом C++ не гарантирует отсутствия утечек памяти. Т.е. даже если человек знает, как писать на C++ (а не на C с классами), он все равно может наступить на грабли.
Re[3]: Встречаете ли вы утечки памяти в популярных либах?
Нет, потому что в других местах память таки освобождалась явно.
Максимум, что могло иметь место быть — писавший код человек принял волюнтаристское решение, что памяти выделяется очень мало, так что пес с ней, но нигде не дал намек в коде (комментарий) о своем решении.