先上结论:
memcpy性能 优于 snprintf性能 优于 strncpy性能
memcpy性能略优于snprintf,strncpy比前两者慢的非常多,基本上是捞不回来了。
编译器:gcc version 3.4.5 (a little old fashion)
没有编译器优化
测试代码:
int strncpy_test() {
char src[] = "1234567890";
char dest[2048];
int len = 0;
for(int i = 0; i < 10000000; ++i) {
memset(dest, 0, sizeof(dest));
strncpy(dest, src, sizeof(dest));
}
return 0;
}
int mempcy_test(){
char src[] = "1234567890";
char dest[2048];
int len = 0;
for(int i = 0; i < 10000000; ++i){
memset(dest, 0, sizeof(dest));
len = strlen(src);
len = sizeof(dest) - 1 > len? len: sizeof(dest) -1;
memcpy(dest, src, len);
dest[len] = '\0';
}
return 0;
}
int snprintf_test() {
char src[] = "1234567890";
char dest[2048];
int len = 0;
for(int i = 0; i < 10000000; ++i) {
memset(dest, 0, sizeof(dest));
snprintf(dest, sizeof(dest), "%s", src);
}
return 0;
}
int main() {
Timer t;
t.start();
mempcy_test();
t.finish();
t.print("mempcy_test");
t.start();
strncpy_test();
t.finish();
t.print("strncpy_test");
t.start();
snprintf_test();
t.finish();
t.print("snprintf_test");
return 0;
}
其中Timmer是自己包的一个计时类,单位是us。
输出:
mempcy_test time use : 1543216
strncpy_test time use : 18600572
snprintf_test time use : 2155672