简洁代码一定比复杂代码效率高吗?

    春节期间,一个正在读计算机系大四的朋友到我这里聊天,谈到C语言的学习时,他说C语言入门容易,精通很难,我表示赞同。他接着举例说,每次写一些函数,自己反复修改后,拿给同学们看时,不是被挑出一些毛病,就是代码被大量精简。我说,初学者首要的是要保证代码的正确性和可读性,代码写多了后,问题自然少了,代码也较简洁了,效率也会随之提高。后来我问他,实现同样功能,简洁代码一定比复杂代码效率高吗?他想了一下说,还得看算法,如果算法相同,简洁代码效率应该高些吧?!我笑了笑说,高效的算法固然效率高些,但即使算法相同,简洁代码也不见得比复杂代码效率高,现在时兴空间换时间,应尽可能减少循环的使用,特别是少用多重循环,或者尽可能在一个循环中做更多的事。聊到最后,我在计算机上给他看如下两段代码:

  1. size_t strlen1(const char *str)  
  2. {  
  3.     const char *p = str;  
  4.     while(*p) p ++;  
  5.     return (size_t)(p - str);  
  6. }  
  7.   
  8. size_t strlen2(const char *str)  
  9. {  
  10.     unsigned v;  
  11.     const char *p = str;  
  12.     while(*p && ((unsigned)p & 3))  
  13.         p ++;  
  14.     if (*p == 0)  
  15.         return (size_t)(p - str);  
  16.     for (v = 0; !v; p += 4)  
  17.     {  
  18.         v = (*(unsigned*)p - 0x01010101) & 0x80808080;  
  19.         if (v)  
  20.             v &= ~*(unsigned*)p;  
  21.     }  
  22.     for (; (v & 0xff) == 0; p ++)  
  23.         v >>= 8;  
  24.     return (size_t)(p - str - 4);  
  25. }  

    我说,这是C语言初学者最熟悉的计算字符串长度函数,版本一是经典写法,应该算是简洁的了;版本二是我按BCB2007的strlen汇编函数改写的,看起来相当复杂,你说那个版本效率更高些?

    他琢磨了很大一会说,版本二构思相当巧妙,循环次数比版本一大大减少,但是循环中的运算量相对过大,而版本一的循环过程中几乎没有运算量,所以版本二的效率应该不会比版本一高多少。

    我叫他将这两段代码抄回去测试一下,他却直接在我的计算机上开始写测试代码,最后的测试结果让他吃了一惊,版本二的平均运算速度居然比版本一高一倍以上。

    他拿起笔和纸,将版本二抄了下来,说是回去后要好好研究一下......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值