免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pprpg
打印 上一主题 下一主题

[C] ( 转 )Linus Torvalds:大多黑客甚至连指针都未理解 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
1 [报告]
发表于 2013-01-10 19:59 |显示全部楼层
这里有性能问题,大神并非毫无破绽 --
  if (rm(entry))  
         *curr = entry->next;  

当连续出现 rm(entry)成立的情况时,对于要删除的节点,不需要往其中写如next指针的。

这里,借助内存记录next指针的动作,就不是很好,
尽量用 CPU寄存器来记录next指针,可以提高效率。

悬赏,谁能给个更好的写法。。


论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2013-01-10 21:09 |显示全部楼层
本帖最后由 群雄逐鹿中原 于 2013-01-10 21:11 编辑

貌似看错了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2013-01-11 12:39 |显示全部楼层
zylthinking 发表于 2013-01-11 12:24
这个 *cur = XXX 也未必一定要在内存记录 next 指针, 编译器的优化未必不能做


除非编译时能理解 free 函数的语义。难。。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2013-01-11 13:45 |显示全部楼层
57楼,看错正常。我在19楼也这样看错了,赶紧删了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2013-01-11 14:12 |显示全部楼层
pmerofc 发表于 2013-01-11 14:04
欢迎挑错


你省掉一个变量是极大的错误,
逻辑上错了,head和curr表征不一样的东西,统一用head,是不对的。

而且,也没必要。变量到实际使用的内存(或寄存器),还是有差距的。
两个变量,可以使用不同的内存,也可以使用同样的内存。

这里你合并了变量,其实是你注意到用同样的内存能达到目的,
编译器分配stack时,会注意不到这一点,造成浪费资源?



论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2013-01-11 14:28 |显示全部楼层
zylthinking 发表于 2013-01-11 14:25
不对, 这个不是可有可无的小问题, linus 代码保证调用完后 head 指向剩余的链表的头;
而专家不能保 ...


汗,你这么确信?验证过吗?

我19楼开始就这么认为的,后来发觉自己想错了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2013-01-11 15:06 |显示全部楼层
这是两位大婶的程序的编译结果,-O1优化,


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP