【测速】memcpy()对比for循环逐个对象拷贝

[color=red][size=x-large]结论:[/size][/color][size=large]一般情况下,memcpy()函数比for循环快个一两倍,某些特殊值上稍微慢点儿。[/size]

[color=red][size=x-large]注意:[/size][/color][size=large]对于需要构造函数、析构函数的类,可能要在拷贝时重载=运算符,此时memcpy()的结果就不是自己想要的了,一般情况下还是老老实实用for循环吧[/size]

[color=red][size=x-large]测试结果如下:[/size][/color]

[img]http://dl.iteye.com/upload/attachment/0076/7247/72a8b802-9e0f-3250-865f-1382aeb40acb.png[/img]

[img]http://dl.iteye.com/upload/attachment/0076/7249/56277b42-e09e-3428-aaa4-7c1134982201.png[/img]

[img]http://dl.iteye.com/upload/attachment/0076/7251/e7eb916a-c74c-3dbd-ad80-27a3267bf17c.png[/img]

[img]http://dl.iteye.com/upload/attachment/0076/7253/7d40e60c-b2f0-31cc-9321-15c2bf2ce0b4.png[/img]

[color=red][size=x-large]测试代码如下(不完全):[/size][/color]
#include <string>
#include "..\Include\lc\utility\Timer.hpp"
#include <iostream>

using namespace LC;
void main() {
typedef long long worktype;
//typedef int worktype;

for(int num=10; num<10000000; num*=5) {
const int testNum=10000000/num*100;
worktype* pDst=new worktype[num];
worktype* pSrc=new worktype[num];

Timer timer;
for (int i=0; i<testNum; i++) {
memcpy(pDst,pSrc,sizeof(worktype) * num );
}
long tMemcpy=timer.getElapsedTimeAndRestart();

for (int i=0; i<testNum; i++) {
for (int n=0; n<num; n++) {
pDst[n]=pSrc[n];
}
}
long timeCopy=timer.getElapsedTimeAndRestart();

std::cout<<"数组长度:"<<num<<";\t测试次数:"<<testNum<<";\tmemcpy: "<<tMemcpy<<"ms;\tfor循环: "<<timeCopy<<"ms"<<std::endl;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值