看下面两个函数
1 /* Convert string to lower case: slow */
2 void lower1 (char *s)
3 {
4 int i;
5
6 for (i = 0; i < strlen(s); i++)
7 if (s[i] >= ’A’ && s[i] <= ’Z’)
8 s[i] -= (’A’ - ’a’);
9 }
10
11 /* Convert string to lower case: faster */
12 void lower2 (char *s)
13 {
14 int i;
15 int len = strlen(s);
16
17 for (i = 0; i < len ; i++)
18 if (s[i] >= ’A’ && s[i] <= ’Z’)
19 s[i] -= (’A’ - ’a’);
20 }
21
22 /* Implementation of library function strlen */
23 /* Compute length of string */
24 size_t strlen(const char *s)
25 {
26 int length = 0;
27 while (*s != ’/0’) {
28 s++;
29 length++;
30 }
31 return length;
32 }
函数lower1 和 lower2的功能是一样的,都是将字符串的字符转换成小写字母。而且长得都差不多。
但是有一点区别在于for循环中lower1每次都调用了strlen而lower2没有。
仅仅这一点导致了性能的巨大差别。
lower1成平方增长
而lower2成线性增长。