| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1384 人关注过本帖
标题:交换?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
看汇编码嘛

授人以渔,不授人以鱼。
2012-08-31 10:45
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:0 
以下是引用TonyDeng在2012-8-30 22:21:52的发言:

与这个类似,很多人也以为a++是不用临时变量的。我曾经说过这种误区,以为写的代码短、量少,就是精辟的程序,其实不然。一个很著名的测试:给20个元素的数组赋值,用循环和写20行赋值语句,你猜哪个快?


同速

无知
2012-08-31 12:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 32楼 Artless
后者快。因为实际赋值操作的机器指令次数是相同的,但前者多了循环检测条件的指令。

[ 本帖最后由 TonyDeng 于 2012-8-31 12:21 编辑 ]

授人以渔,不授人以鱼。
2012-08-31 12:19
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:0 
以下是引用TonyDeng在2012-8-31 12:19:16的发言:

后者快。因为实际赋值操作的机器指令次数是相同的,但前者多了循环检测条件的指令。


无知
2012-08-31 12:46
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
这个问题 如果就是20个 基本没区别

如果大了 能看出区别 但循环的指令少 赋值的指令多 所以 一般认为 以某个合适的【块】来进行是最快的
2012-08-31 12:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
个数越少,差异越明显。一个赋值操作只有一次mov,但每次循环迭代都要多一个if检测动作。看效率,不是看指令数目,而是看实际执行了多少次,以及每个指令操作的耗时(不同指令有不同的耗时差异)。这是看性价比的取舍,如果是数目有限的赋值,往往是直接赋值的效率更高,只是书写费力罢了,随着数目的增加,这种费力效应不断放大,就不如使用循环了,此时省的是自己的功夫,但不省机器的功夫。确实是要平衡,这也是我一直说不要总玩算法的原因,事实上不同的算法有不同的适应环境,就算是排序那么简单的东西,在不同的数据规模上也有很显著的性能差异,不要以为通晓所有排序算法就了不得,当你不知道面向实际数据规模有所取舍的时候,那就是书呆子,而现实更需要的是你懂得这里面有取舍的需求,根据实际的情况选择数据规模和使用算法。

授人以渔,不授人以鱼。
2012-08-31 12:57
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
个数越少,差异越明显。

你说的是差的比例大 但从数值上来说 差的很少 我上面说差的不大也是从绝对时间上来说的
2012-08-31 12:58
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用TonyDeng在2012-8-31 12:57:07的发言:

个数越少,差异越明显。一个赋值操作只有一次mov,但每次循环迭代都要多一个if检测动作。看效率,不是看指令数目,而是看实际执行了多少次,以及每个指令操作的耗时(不同指令有不同的耗时差异)。这是看性价比的取舍,如果是数目有限的赋值,往往是直接赋值的效率更高,只是书写费力罢了,随着数目的增加,这种费力效应不断放大,就不如使用循环了,此时省的是自己的功夫,但不省机器的功夫。确实是要平衡,这也是我一直说不要总玩算法的原因,事实上不同的算法有不同的适应环境,就算是排序那么简单的东西,在不同的数据规模上也有很显著的性能差异,不要以为通晓所有排序算法就了不得,当你不知道面向实际数据规模有所取舍的时候,那就是书呆子,而现实更需要的是你懂得这里面有取舍的需求,根据实际的情况选择数据规模和使用算法。

确实是要平衡,这也是我一直说不要总玩算法的原因,事实上不同的算法有不同的适应环境,就算是排序那么简单的东西,在不同的数据规模上也有很显著的性能差 异,不要以为通晓所有排序算法就了不得,当你不知道面向实际数据规模有所取舍的时候,那就是书呆子,而现实更需要的是你懂得这里面有取舍的需求,根据实际 的情况选择数据规模和使用算法。

现在的情况是 能在算法层面上优化一下就很不错了 很少能通吃 即便是专门的计算软件 也这样
2012-08-31 12:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
像递归那种算法,无论是高级代码还是汇编码,都是少量的,但事实上它最耗时、最耗资源,光是保护现场和恢复的动作,就足以把那些精简代码完全废掉,变成负效应。教科书上最误人子弟的一个经典,就是教人用递归算斐波那契数列或阶乘。

授人以渔,不授人以鱼。
2012-08-31 13:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用zklhp在2012-8-31 12:58:29的发言:

个数越少,差异越明显。

你说的是差的比例大 但从数值上来说 差的很少 我上面说差的不大也是从绝对时间上来说的

是的,据那个报告说,差异其实是30%左右。

授人以渔,不授人以鱼。
2012-08-31 13:02
快速回复:交换?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013156 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved