首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

对于开辟空间、比较、memcpy这三个哪个更快(一定条件上)

2013-01-08 
对于开辟空间、比较、memcpy这三个哪个更快(一定条件下)?我主要是针对数据结构里面的直接插入排序来发问的,

对于开辟空间、比较、memcpy这三个哪个更快(一定条件下)?
我主要是针对数据结构里面的直接插入排序来发问的,因为里面带排序的数组tArray[0]作为哨兵并不参与实际比较,而我的数据实际上tArray[0]也是带排序的,所以我准备将数据用memcpy复制到另一个数组(从下标1开始),然后排序后再复制回来。问题是:其实那个哨兵是可以不用的,我只需在最前面来个if判断带插入数据是否与前面有序序列比较完全,是的话就break,但这样就会多几次比较耗费时间,所以说我想问相对而言memcpy+开辟空间和if判断哪个花费时间要少?
[解决办法]
当然是if了,指令远少于memcpy。
[解决办法]
cmp命令是原子级别的  每秒比较百万次无压力
[解决办法]
逐个复制快,memcpy只是写着方便
[解决办法]
复制应该是按CPU的位数复制  不会优化的话肯定memcpy快
[解决办法]

引用:
引用:cmp命令是原子级别的  每秒比较百万次无压力cmp?What's this ?

if(a!=b)
对应汇编
cmp a,b之类的一条指令  可能会加上寄存器传值 跳转之类的
[解决办法]
引用:
引用:逐个复制快,memcpy只是写着方便那假设我的元素是char类型呢?如果用指针是不是还会因为是二级寻址而降低速度?

from my understanding, 肯定会的!

引用:
引用:cmp命令是原子级别的  每秒比较百万次无压力cmp?What's this ?

汇编语句
cmp r0, r1
比较r0与r1的值,将结果写入状态寄存器
[解决办法]
这贴回复太多胡扯了,char类型memcpy会比逐个拷贝慢?明显是一样的
另外用if显然要慢
a=b;
显然比
if(a!=b)
    a=b;
要快

[解决办法]
自己测测吧。

[解决办法]
引用:
我主要是针对数据结构里面的直接插入排序来发问的,因为里面带排序的数组tArray[0]作为哨兵并不参与实际比较,而我的数据实际上tArray[0]也是带排序的,所以我准备将数据用memcpy复制到另一个数组(从下标1开始),然后排序后再复制回来。问题是:其实那个哨兵是可以不用的,我只需在最前面来个if判断带插入数据是否与前面有序序列比较完全,是的话就break,但这样就会……


cpu对于单纯的数据拷贝I/O和比较,只要中途不涉及浮点运算的快的一逼!,你可以分别写2个代码,编好了 time 一下就知道

热点排行