- 论坛徽章:
- 0
|
受Trim的感染,本人刚刚做了一个很有趣的测试,现把测试结果贴在这里供大家参考。
测试环境:Red Hat Linux 8.0 on VMware 4.5.0 build 7174
1.c- #include <string.h>;
- #include <memory.h>;
- #define STRSZ 32768
- #define TIMES 100000
- main()
- {
- char s[STRSZ], t[STRSZ];
- int i, l;
- memset( s, ' ', STRSZ - 1 );
- s[STRSZ - 1] = 0;
- for ( i = 0; i < TIMES; i ++ )
- strcpy( t, s );
- }
复制代码
编译命令:cc 1.c -o1
测试结果:- real 0m6.293s
- user 0m6.281s
- sys 0m0.012s
复制代码
2.c- #include <string.h>;
- #include <memory.h>;
- #define STRSZ 32768
- #define TIMES 100000
- main()
- {
- char s[STRSZ], t[STRSZ];
- int i, l;
- memset( s, ' ', STRSZ - 1 );
- s[STRSZ - 1] = 0;
- for ( i = 0; i < TIMES; i ++ )
- memcpy( t, s, ( strlen( s ) + 1 ) * sizeof( char ) );
- }
复制代码
编译命令:cc 2.c -o2
测试结果:- real 0m2.131s
- user 0m2.123s
- sys 0m0.006s
复制代码
这个结果说明strlen与memcpy的组合要大大快于strcpy!
但有些幽默的是,如果使用编译器的优化选项,得到的结果反而变慢了。
编译命令:cc -O 2.c -o2
测试结果:- real 0m7.927s
- user 0m7.920s
- sys 0m0.008s
复制代码 |
|