结构体直接拷贝和用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么?
[解决办法]