AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

程式语言效率分析(2)

51自学网 http://www.51zixue.net

二、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与组合语言的距离。足证纵然使用组合语言,若不采用精简指令的技巧,其效率不彰。一般程式师很少在组合语言的技巧上下功夫, 以致不能认识组合语言的真面目。

<

 

 

 
上一篇:程式语言效率分析(1)  下一篇:中断和异常的转移方法