免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 13303 | 回复: 26

指针和数组到底谁的效率高 [复制链接]

论坛徽章:
0
发表于 2007-08-20 18:21 |显示全部楼层
按照C专家编程上的意思,通过指针访问数组元素需要2次引用内存,而通过数组名访问数组元素只要一次访问内存。既然如此,怎么C PROGRAMMING LANGUAGE上说通过指针比通过数组名效率要高

论坛徽章:
0
发表于 2007-08-20 18:31 |显示全部楼层
这个不好一概而论吧, 看一下编译后的汇编代码?

论坛徽章:
0
发表于 2007-08-20 18:42 |显示全部楼层
难道《C PROGRAMMING LANGUAGE》有错误?

论坛徽章:
0
发表于 2007-08-20 18:47 |显示全部楼层
把原话贴出来看看吧

原帖由 specter117 于 2007-8-20 18:42 发表
难道《C PROGRAMMING LANGUAGE》有错误?

论坛徽章:
0
发表于 2007-08-20 19:11 |显示全部楼层
晕。中文版,P83 5.3,一般来说,用指针编写的程序比用数组下标编写的程序执行速度快。

论坛徽章:
0
发表于 2007-08-20 19:40 |显示全部楼层
应该是相反吧, 数据组引用的数据是连续的, 高速缓存中容易中的

论坛徽章:
0
发表于 2007-08-20 20:30 |显示全部楼层
最终还是要看你的编译器如何处理的!

论坛徽章:
0
发表于 2007-08-20 21:07 |显示全部楼层

回复 #1 specter117 的帖子

不知道你想要的是不是这个:
(1)对于顺序访问的而言,数组比链表效率高。

(2)对于数组,间接访问(指数组名+下标)绝不比指针访问的效率高。
比如:
int i;
int b[100];
数组访问;
  for(i = 0; i < 100; i++)
  {
    b = 0;
  }
指针访问:
   int *p = b;
   for(i = 0; i < 100; i++)
  {
        *p++ = 0;
  }
数组访问时,b等价于*(b + i) =*( (char *)b + i * sizeof(int) )
指针访问时,*p++等价于*(p + 1) = *((char *)p + 1 * sizeof(int))
由于sizeof是在编译时确定的,所以
b = *((char *) b + 4 * i)

*p++ = *((char *)p + 1)
间接访问有乘法运算,而指针访问只有加法运算,所以在这里,间接访问没有指针访问效率高。

[ 本帖最后由 web_surf 于 2007-8-20 21:08 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2007-08-20 22:36 |显示全部楼层
原帖由 specter117 于 2007-8-20 18:21 发表
按照C专家编程上的意思,通过指针访问数组元素需要2次引用内存,而通过数组名访问数组元素只要一次访问内存。既然如此,怎么C PROGRAMMING LANGUAGE上说通过指针比通过数组名效率要高

不觉得这个问题有什么讨论的必要。

论坛徽章:
0
发表于 2007-08-20 23:28 |显示全部楼层
原帖由 MMMIX 于 2007-8-20 22:36 发表

不觉得这个问题有什么讨论的必要。


论坛是用来交流的,你觉得没必要不代表我觉得没必要,不想讨论就别进来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP