Rod*_*Luo 3 perl performance operations
我已将所有代码和运行信息放在下面.处理非常长的字符串时,标题中的操作速度是不同的.为什么以及有多少其他操作显示相同的特征?(如果循环低于10 ^ 4,则差异可以忽略不计.)
? ~ cat t1.pl
#!/usr/bin/env perl
$a = 'a';
$i = 0;
while ($i < 100000){
$a .= 'a';
$i++;
}
? ~ time perl t1.pl
perl t1.pl 0.01s user 0.00s system 85% cpu 0.021 total
? ~ cat t2.pl
#!/usr/bin/env perl
$a = 'a';
$i = 0;
while ($i < 100000){
$a = $a.'a';
$i++;
}
? ~ time perl t2.pl
perl t2.pl 0.50s user 0.01s system 99% cpu 0.507 total
Run Code Online (Sandbox Code Playgroud)
运行时不同,因为它们是不同的操作:
Run Code Online (Sandbox Code Playgroud)$a .= 'a';
这附加到$a.Perl中的字符串通常有空间容纳更多数据,因此在很多情况下,这只是在字符串中设置单个字节并更改长度信息.
Run Code Online (Sandbox Code Playgroud)$a = $a.'a';
这将创建一个新的字符串$a,'a'并在此完成后设置$a为此字符串.因此,至少$a需要分配大小的第一存储器并且$a需要将内容复制到该存储器中.然后完成追加,然后完成赋值,然后可以将内存返回给Perl的内部内存管理,这取决于操作系统和编译时选项可能会将内存返回给系统.