Perl “转到标签”会导致内存泄漏吗?

Perl “转到标签”会导致内存泄漏吗?,perl,memory,goto,Perl,Memory,Goto,将goto与标签一起使用会导致内存泄漏吗?我在报告中发现的所有相关信息是: goto标签表单找到标签为LABEL的语句并在那里继续执行 使用goto标签是否安全?测试1分钟后,答案似乎是:是否(见下文更新) 在运行时观察top,%MEM不断增加 { THIS: my $x = 1; goto THIS; } 这不显示相同的递增%MEM计数器 while (1) { my $x = 1; } 更新 我误解了这个问题。我对这个问题的看法是,使用goto,是否会将内

goto
与标签一起使用会导致内存泄漏吗?我在报告中发现的所有相关信息是:

goto标签
表单找到标签为LABEL的语句并在那里继续执行


使用
goto标签是否安全?

测试1分钟后,答案似乎是:是(见下文更新)

在运行时观察
top
%MEM
不断增加

{
    THIS:
    my $x = 1;
    goto THIS;
}
这不显示相同的递增
%MEM
计数器

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


我误解了这个问题。我对这个问题的看法是,使用
goto
,是否会将内存分配给该词法范围中已经存在的词法变量,而我的测试似乎是肯定的。严格地说,这不是内存泄漏。如果perl退出此词法作用域,则分配的空间将被释放。

在perl中会有所帮助,如果您不创建手动清除的任何循环依赖项(即指向指向自身的对象的引用),则当前作用域退出时,所有内容都会被清除(自动垃圾回收)。最后一个作用域是脚本文件本身。综上所述,我建议以一种不需要
goto
(非常简单)的方式构造代码。如果在循环中,我们有
next
last
@stevieb,我不打算在我的代码中使用
goto
,只是想知道:)但是如果我们有一个标签,并且我们
goto
它在同一范围内,在这两者之间我们声明了一个变量,会怎么样?这对他来说有点不清楚。只是为了让其他人知道:)++关于这个问题。这不是一个漏洞,因为perl不会丢失内存,并且会在作用域出口处释放所有内存。为了确保我得到了这一点,在您的示例中,perl仍然会跟踪每个
goto
的所有
my$x
s,在本例中,最终会填满所有可用的内存吗?yonyon100:看起来是这样,是的。我只运行了第一个示例大约1分钟,内存使用继续攀升。