在循环中调用时,"我的"是否覆盖内存?

Isa*_*rke 2 variables perl memory-management

一个简单但相关的问题:在循环中调用时,"我的"是否覆盖内存?
例如,在循环之外声明它是"更好"(就内存泄漏,性能,速度而言):

my $variable;
for my $number ( @array ) {
    $variable = $number * 5;
    _sub($variable);   
}
Run Code Online (Sandbox Code Playgroud)

或者我应该在循环中声明它:

for my $number ( @array ) {
    my $variable = $number * 5;
    _sub($variable);
}
Run Code Online (Sandbox Code Playgroud)

(我刚才提出的代码了,但并不意味着做任何事情,也不被使用-因为它是-在现实生活中)
将Perl的分配内存中的新空间,为每一位的一个用于迭代?

inn*_*naM 9

Aamir已经告诉过你会发生什么.

除非有理由使用第一个版本,否则我建议坚持使用第二个版本.你不想关心以前的状态$variable.使用新变量开始每次迭代最简单.如果变量包含一个引用,如果你把它推到一个数组上,你实际上可能会在脚中射击.

编辑:

是的,性能受到了打击.使用循环变量会更快.但是,它会变得多快,因为这将取决于您的具体情况.不管它有多快,但永远记住:过早优化是万恶之源.

  • 虽然更清晰,但由于重复分配和取消分配内存,第二个版本会受到性能影响.在实践中,差异几乎总是可以忽略不计,但知道它在那里是有用的. (3认同)