四、测试2:混合格式化字符串和数字
看起来使用自己写的 Long2String 函数执行速度更快一些,但是它有一个弊端,就是只能格式化数字。
如果我们需要把字符串和数字一起格式化成一个字符串,应该如何处理?
如果使用 sprintf 库函数,那非常方便:
- sprintf(buff, "%s%d", "hello", 123456);
如果继续使用 Long2String 函数,那么就要分步来格式化,例如:
- 以上两种方式都能达到目的,那执行效率如何呢?继续测试:
- [code]
- int main()
- {
- printf("long size = %d, LONG_MAX = %ld\n", sizeof(long), LONG_MAX);
-
- // 测试 1000 万 次
- const char *prefix = "ZhangSan has money: ";
- int total = 1000 * 10000;
- char buff1[32] = { 0 };
- char buff2[32] = { 0 };
- // 测试 sprintf
- long long start1 = getSysTimestamp();
- for (int i = 0; i < total; ++i)
- sprintf(buff1, "%s%ld", prefix, LONG_MAX);
- printf("sprintf ellapse: %lld us \n", getSysTimestamp() - start1);
- // 测试 Long2String
- long long start2 = getSysTimestamp();
- for (int i = 0; i < total; ++i)
- {
- sprintf(buff2, "%s", prefix);
- Long2String(buff2 + strlen(prefix), LONG_MAX);
- }
- printf("Long2String ellapse: %lld us \n", getSysTimestamp() - start2);
-
- return 0;
- }
// 拆成 2 个步骤
sprintf(buff, "%s", "hello");
Long2String(buff + strlen(buff), 123456);[/code]
执行结果对比:
- long size = 4, LONG_MAX = 2147483647
- sprintf ellapse: 2477686 us
- Long2String ellapse: 816119 us
执行速度仍然是 3 倍左右的差距。就是说,即使拆分成多个步骤来执行,使用 Long2String 函数也会更快一些!
|