数组拷贝的速度比较
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时钟滴答一下为一次)
相关文章推荐
- 用for循环对int数组的赋值和用System.arraycopy()对int数组赋值的速度比较
- 关于CH376拷贝U盘文件速度的测试比较
- Java数组拷贝/复制的效率比较
- JavaScript和Java数组拷贝各种方法耗时比较
- Java数组拷贝/复制的效率比较
- 文件拷贝速度比较
- C语言数组和链表删除元素速度比较
- 数组拷贝的方法比较
- 向量与动态数组的存储速度比较
- 比较数组下标操作与指针操作的速度(将程序转换成汇编程序)
- 两种拷贝文件方式的速度比较。
- c#写excel 转化成数组写到excel中速度比较快
- GUN cp 与 tar 拷贝文件速度 比较 推荐
- 数组速度比较
- Java 数组的拷贝、排序、搜索
- String,StringBuffer,StringBuilder运行速度的比较
- 创建分和生日比较数组
- 数组拷贝
- javascript 数组的深浅拷贝
- 指针 数组 两个方式调用数组元素 比较大小