| 网站首页 | 新闻快报 | 软件教程 | 硬件教程 | 设计学院 | Q Q 专区 | 编程开发 | 网络安全 | 
您现在的位置: 浩扬网络 >> 编程开发 >> 汇编文章 >> 教程正文
程式语言效率分析(2)
作者:不详 文章来源:安全中国 点击数: 更新时间:2006-8-4 20:13:34

二、C 

    C近来极受美国各系统公司的推崇,我们特以之与组合语言作个比较,但不幸的是在指令的精简上,就显得力不从心,不像组合语言那样可以斤斤计较。 
    因此,我们祇能就点阵移位、查小表及查总表的方式,测试其效率。首先,利用查大表的方式如下: 

  1: main() 
  2: { 
  3:     unsigned char     s[24][3]; 
  4:     unsigned short  tab[256], d[48][3], count; 
  5:     register short  i,j,k; 
  6: 
  7:     for (count = 0; count < 10000; count++) 
  8:     { 
  9:         k = 0; 
 10:         for (i = 0; i < 24; i++) 
 11:         { 
 12:         for (j = 0; j < 3; j++) 
 13:            d[k][j] = d[k + 1][j] = tab[s[i][j]]; 
 14:         k += 2; 
 15:         } 
 16:     } 
 17: } 

    程式制作时间10分钟,较组合语言稍快;占用空间4575字元,则大了三倍,至于执行速度为18秒,慢了七倍之多。 
    再换个方法,试一试查小表如次: 
  1: main() 
  2: { 
  3:     unsigned char    i,j, s[24][3], d[48][6], tab[16]; 
  4:     unsigned short  count; 
  5:     register short  k, l, x; 
  6: 
  7:     for (count = 0; count < 10000; count++) 
  8:     { 
  9:         k = 0; 
 10:         for (i = 0; i < 24; i++) 
 11:         { 
 12:         l = 0; 
 13         for (j = 0; j < 3; j++) 
 14:         { 
 15:             x = s[i][j]; 
 16:          d[k][l] = d[k + 1][l] = tab[x & 0360 >> 4]; 
 17:          d[k][l+1] = d[k + 1][l + 1] = tab[x & 017]; 
 18:             l += 2; 
 19:         } 
 20:         k += 2; 
 21:         } 
 22:     } 
 23: } 
    占用空间为4,693 字元,比组合语言大了五倍;速度为30秒,则慢了四倍多。这证明了组合语言的灵活性,在空时效率交换的技术运用下,可以选择最有利的条件。再看利用位置的方式,结果如何? 

  1: main() 
  2: { 
  3:     unsigned char          ss[24][3]; 
  4:     unsigned short       dd[48][3]; 
  5:     int              i, k, count; 
  6:     register short       d, j; 
  7:     register unsigned char   s; 
  8: 
  9:     for (count = 0; count < 10000; count++) 
 10:     { 
 11:         k = 0; 
 12:         for (i = 0; i < 24; i++) 
 13:         { 
 14:         for (j = 0; j < 3; j++) 
 15:         { 
 16:             s = ss[i][j]; 
 17:             d = 0; 
 18:             if (s & 01) 
 19:             d |= 03; 
 20:             if (s & 02) 
 21:             d |= 014; 
 22:             if (s & 04) 
 23:             d |= 060; 
 24:             if (s & 010) 
 25:             d |= 0300; 
 26:             if (s & 020) 
 27:             d |= 01400; 
 28:             if (s & 040) 
 29:             d |= 06000; 
 30:             if (s & 0100) 
 31:             d |= 030000; 
 32:             if (s & 0200) 
 33:             d |= 0140000; 
 34:             dd[k + 1][j] = dd[k][j] = d; 
 35:         } 
 36:         k += 2; 
 37:         } 
 38:     } 
 39:} 

    占用的空间为 4,727字元,较组合语言大四倍,执行时间29秒,差不多是四倍的差异。这种采用高阶指令的方式,拉近了C与组合语言的距离。足证纵然使用组合语言,若不采用精简指令的技巧,其效率不彰。一般程式师很少在组合语言的技巧上下功夫, 以致不能认识组合语言的真面目。 
【教程录入:残梦    责任编辑:残梦 】
发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
  • 上一篇教程:

  • 下一篇教程:
  • 网友评论:(评论内容只代表网友观点,与浩扬网络立场无关!)
    热门文章

    赞助商


    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 |