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

结构体直接拷贝和用memcpy在效率上的区别?解决方案

2012-03-29 
结构体直接拷贝和用memcpy在效率上的区别??声明一个很大的结构体,然后测试直接赋值(bitwise)和用memcpy的

结构体直接拷贝和用memcpy在效率上的区别??
声明一个很大的结构体,然后测试直接赋值(bitwise)和用memcpy的效率问题。

C/C++ code
const size_t    SIZE = 10000 * 10000struct big_struct{    char  data[SIZE];};



在栈上基本上时间都是一样,不过因为栈保留有大小,所以改为用堆。

C/C++ code
int main(){    big_struct  *pat = NULL, *struct_a = NULL, *struct_b = NULL;    time_t  time_a = 0, time_b = 0;        //for bad_alloc    try    {        pat = new big_struct();                struct_a = new big_struct();        struct_b = new big_struct();    }    catch(std::exception& ec)    {        PRINT_LINE(ec.what());        return -1;    }    time_a = clock();    *struct_a = *pat;   //bitwise    time_a = clock() - time_a;    time_b = clock();        memcpy(struct_b, pat, sizeof(pat)); //memcpy    time_b = clock() - time_b;    printf("time a: %d \n", time_a);    printf("time b: %d \n", time_b);      return 0;}


测试结果是,time_b始终保持为0,time_a随SIZE的增大不断增加。

这是为什么?
memcpy比直接赋值更快?是因为在堆上原因多一些I/O么?

[解决办法]
探讨
movl -36(%ebp), %eax
movl %eax, -68(%ebp)
movl -32(%ebp), %eax
movl %eax, -64(%ebp)
movl -28(%ebp), %eax
movl %eax, -60(%ebp)
movl -24(%ebp), %eax
movl %eax, -56(%ebp)
movl -20(%ebp), %eax
movl %eax, -52(%ebp)
movl -16(%ebp), %eax
movl %eax, -48(%ebp)
movl -12(%ebp), %eax
movl %eax, -44(%ebp)
movl -8(%ebp), %eax
movl %eax, -40(%ebp)

热点排行