169 похожих чатов

while (1) { my $a =

{};
$a->{func} = sub {
$a->{cnt}++;
};
}

Тут есть утечка - почему и как поправить?

24 ответов

28 просмотров

Циклическая ссылка?

Warstone- Автор вопроса
Alex S
Циклическая ссылка?

Да и как это разорвать так, чтобы не потерять работоспособность кода.

Warstone- Автор вопроса
Ivan
Weak ref )

На что?

Warstone
На что?

Часть ссылок не должна считать дочерние ссылки

Warstone- Автор вопроса
Alex S
Передать cnt, все скаляры указатели

Так неудобно-же. Прдставь что счетчиков 100500

Warstone
Так неудобно-же. Прдставь что счетчиков 100500

Об этом заботится интерпретатор.

Warstone- Автор вопроса
Ivan
Об этом заботится интерпретатор.

Нет. Тут должен заботиться ты.

Warstone
Нет. Тут должен заботиться ты.

Ээээ, слюшай, я языком с динамическим выделением памяти вашпе нэ для это занималса

Warstone- Автор вопроса
Warstone
эээ а как перл следит за памятью?

Да зачэм это? Как хочет, таа и следит. )

Warstone
Так неудобно-же. Прдставь что счетчиков 100500

Сорри, а это вообще идиоматично присваивать замыкание члену словаря? Прост я в питоне ни разу не встречал, чтобы замыкание (кроме декораторов, но там тоже проблем на практике не возникает) становилось методом обьекта Точнее вопрос, проблема с утечкой в замыканиях, это проблема перла, или в других языках так же

Warstone- Автор вопроса
Alex S
Сорри, а это вообще идиоматично присваивать замыка...

Так в том и соль чтобы замкнуть весь словарь (хотя тут объект). Проблема в том что замыкание кладется в сам объект и возникает циклическая ссылка

Alex S
Сорри, а это вообще идиоматично присваивать замыка...

В нормальных языках это асан найдет и отстрелит

Sergei Zhmylove
В нормальных языках это асан найдет и отстрелит

Кхм, а если что, это так-то прототип ООП.

Warstone
На что?

weaken $a->{func} так норм?

Warstone- Автор вопроса
Warstone
Нет

почему?

use Scalar::Util "weaken"; while (1) { my $a = {}; $a->{func} = sub { $a->{cnt}++; }; weaken $a; } а тут какие минусы ?

Warstone- Автор вопроса
Alexey V
use Scalar::Util "weaken"; while (1) { my $a =...

Запусти. Утечка останется

Alexey V
use Scalar::Util "weaken"; while (1) { my $a =...

Лол, тебе не понятно что ли?

Alexey V
use Scalar::Util "weaken"; while (1) { my $a =...

Ты попробуй вызвать func :) и потом для наглядности посмотри, что будет в $a

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта