Chinaunix首页 | 论坛 | 博客
  • 博客访问: 58505
  • 博文数量: 6
  • 博客积分: 170
  • 博客等级: 入伍新兵
  • 技术积分: 119
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-24 11:20
文章分类
文章存档

2013年(1)

2012年(1)

2011年(4)

我的朋友

分类: C/C++

2011-07-26 15:06:30

  1. void try5()
  2. {
  3. register int *p1,*p2;//寄存器指针变量

  4. for(p1 = x, p2 = y; p1 < &x[SIZE])
  5.   *p1 = *p2 ;
  6. }

 

这里关键是通过测试 看看p1是否到达源数组的末尾。 因为SIZE在这里是一个数值常量,所以表达式 &x[SIZE] 就可以在编译时求值。

 

 

一些总结:

1、当你根据某个固定数目的增量在一个数组中移动时,使用指针变量将比使用下标产生效率更好的代码,当这个增量是1并且机器具有地址自动增量模型时,这点表现得更为突出。

2、声明为寄存器变量的指针通常比位于静态内存和堆栈中的指针效率更好(具体挺高的幅度取决于你所使用的机器)

3、如果你可以公国测试一些已经初始化并经过调整的的内容来判断循环是够应该终止,那么你就不需要使用一个单独的计算器。

4、哪些必须在运行时求值的表达式较之诸如&array[SIZE]或array SIZE这样的变量表达式往往代价更高。

 

 

 

提示: 有些时候一个函数为了仅仅的几十微秒的执行时间,是不是值得牺牲程序的可读性?偶尔,答案是肯定的,但在绝大多数情况下,答案是不容置疑的‘否’,因为真正做一个程序难于编写在前,难于维护在后。

笔者也是刚刚毕业工作,来到一个中小规模的民营企业,没有任何的函数手册、说明,深深体会到维护的难处。

 

 

--

阅读(2807) | 评论(0) | 转发(1) |
0

上一篇:没有了

下一篇:几个经常被举例的宏定义

给主人留下些什么吧!~~