`

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

    博客分类:
  • C++
 
阅读更多
结论:一般情况下,memcpy()函数比for循环快个一两倍,某些特殊值上稍微慢点儿。

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

测试结果如下:









测试代码如下(不完全):
#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;
    }
}

  • 大小: 44.5 KB
  • 大小: 44.5 KB
  • 大小: 43.9 KB
  • 大小: 45.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics