Perl速度:$ a = $ a。$ b和$ a。= $ b之间的差异

时间:2015-11-20 08:05:21

标签: performance perl 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

1 个答案:

答案 0 :(得分:7)

运行时不同,因为它们是不同的操作:

$a .= 'a';

这会附加到$a。 Perl中的字符串通常有空间容纳更多数据,因此在很多情况下,这只是在字符串中设置一个字节并更改长度信息。

$a = $a.'a';

这将从$a'a'创建一个新字符串,在此完成后,将$a设置为此字符串。因此,需要分配至少大小为$a的第一存储器,并且需要将$a的内容复制到该存储器中。然后完成追加,然后完成赋值,然后可以将内存返回给Perl的内部内存管理,这取决于操作系统和编译时选项可能会将内存返回给系统。