作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已将所有代码和运行信息放在下面。在处理很长的字符串时,题目中的运算速度是不一样的。为什么以及有多少其他操作显示出相同的特征?(如果循环次数低于 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
最佳答案
运行时是不同的,因为这些是不同的操作:
$a .= 'a';
这附加到 $a
。 Perl 中的字符串通常在末尾有更多数据空间,因此在很多情况下,这只是在字符串中设置一个字节并更改长度信息。
$a = $a.'a';
这会从 $a
和 'a'
中创建一个新字符串,完成后将 $a
设置为该字符串。因此,至少需要分配 $a
大小的第一个内存,并且需要将 $a
的内容复制到该内存中。然后附加完成,接着是赋值,然后内存可以返回给 Perl 的内部内存管理,这取决于操作系统和编译时间选项可能会将内存返回给系统。
关于performance - Perl 速度 : difference between $a = $a. $b 和 $a .= $b,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33821753/
我是一名优秀的程序员,十分优秀!