Подтвердить что ты не робот

Может ли `goto LABEL` вызвать утечку памяти?

Может ли использование goto с ярлыками вызвать утечку памяти? Все, что я нашел в документации для goto, которая кажется актуальной:

Форма goto LABEL находит оператор, помеченный LABEL, и возобновляет выполнение там.

Безопасно ли использовать goto LABEL?

4b9b3361

Ответ 1

После 1 минуты тестирования ответ выглядит следующим образом: yes no (см. обновление ниже)

Наблюдая за top, пока он работает, %MEM непрерывно увеличивает

{
    THIS:
    my $x = 1;
    goto THIS;
}

Это не показывает тот же увеличивающий %MEM счетчик

while (1) {
    my $x = 1;
}

UPDATE

Я неправильно понял вопрос. Мой вопрос заключается в том, будет ли выделена память для лексической переменной, которая уже существует в этой лексической области с использованием goto, и мой тест, кажется, говорит "да". Строго говоря, это не утечка памяти. Если perl когда-либо выйдет из этой лексической области, выделенное пространство будет выпущено.