您的位置:首页 > 其它

数组拷贝的速度比较

2006-11-27 20:50 316 查看

#include <iostream>


#include <time.h>


#include <stddef.h>


#include <string.h>




using namespace std;


void copy_with_pointers(char const *src,char *dst,size_t n)




...{


for(size_t k=0;k!=n;++k)


*dst++=*src++;


}




void copy_with_indices(char const *src,char *dst,size_t n)




...{


for(size_t k=0;k!=n;++k)


dst[k]=src[k];


}




int main()




...{


int const n_bytes=100000;


int const n_calls=100;


char *src=new char[n_bytes];


char *dst=new char[n_bytes];




memcpy(dst,src,n_bytes);


clock_t start,end,reftime;




start=clock();


for(int k=0;k!=n_calls;++k)


memcpy(dst,src,n_bytes);


end=clock();


cout<<"Time with memcpy: "<<rend-start<<endl;




start=clock();


for(int k=0;k!=n_calls;++k)


copy_with_pointers(src,dst,n_bytes);


end=clock();


cout<<"Time with pointer: "<<end-start<<endl;




start=clock();


for(int k=0;k!=n_calls;++k)


copy_with_indices(src,dst,n_bytes);


end=clock();


cout<<"Time with indices: "<<end-start<<endl;




delete[] src;


delete[] dst;


return 0;


}





100000大小的数组拷贝100次,比较三种方式谁更快(memcpy, 指针,数组),编译器GUN C++

首先用C <string.h>里的库函数memcpy,运行多次后看到大部分的结果是0,有少量是16

然后用指针拷贝的方式,稳定在46,但偶尔会飙到63左右。

最后是数组下标,时间在62左右,最高78,不过有时也会降到46,但这个时候指针拷贝的时间大部分是64,也会稳在46,47

多次比较的结果,还是C函数速度最快,不过只适用与初始化数组为同一个值。而指针相对于数组下标稍快一些。当然这个实验中还有函数进栈、出栈的时间使得指针和下标时间较长。

(这里clock() 的时间单位是,CPU时钟滴答一下为一次)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: