免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 19897 | 回复: 2
打印 上一主题 下一主题

关于perl字符串连接的方法讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-10 15:51 |只看该作者 |倒序浏览
perl里面用如下两种方法作字符串连接,为什么效率相差巨大?
方法1:
$line = "123";
$line = $line."456";
此种方法如果放在循环中,大数据量的执行速度极慢

方法2:
$line = "123";
$line .= "456" ;
改用此种方法后速度有质的飞跃,我对perl语言的概念不时很了解,基础也不好,请问高手这两种方式为什么会产生如此大的效率差异?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-09-10 18:12 |只看该作者

关于perl字符串连接的方法讨论


  1. #!/usr/bin/perl
  2. use Benchmark qw(:all) ;

  3. timethese(20, {
  4.         'f1' =>; \&compute1,
  5.         'f2' =>; \&compute2
  6. });

  7. sub compute1(){
  8.   for($i=0;$i<10000;$i++){
  9.      $tmp = $tmp."aaa";
  10.   }
  11. }
  12. sub compute2(){
  13.   for($i=0;$i<10000;$i++){
  14.      $tmp .= "aaa";
  15.   }
  16. }

复制代码
Benchmark: timing 20 iterations of f1, f2...
        f1: 97 wallclock secs (96.93 usr +  0.24 sys = 97.17 CPU) @  0.21/s (n=20)
        f2:  1 wallclock secs ( 0.29 usr +  0.15 sys =  0.44 CPU) @ 45.45/s (n=20)


的確比較快....
為什麼?
我猜可能跟pointer取值、運算、給值的次數有關係....
因為 perl取得變量的內容..採用的是二次pointer...
也就是

變量A指向位址B、位址B指向實際內存中的位址...

所以程序中多一個的變量..就會多一次pointer取值...
詳情可能得看perl的source才能知道...:)

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-09-10 21:06 |只看该作者

关于perl字符串连接的方法讨论

》》$line = $line."456";
这个语句中,line要被计算两次。
》》$line .= "456" ;
这个计算一次就可以了。
其实这个和下面的一个道理。

  1. i = i+2;
  2. i +=2;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP