减少内存引用
1
2
3
4
5
6
7
8
|
void func(long *xp, long *yp) {
*xp += *yp;
*xp += *yp;
}
void func2(long *xp, long *yp) {
*xp += 2* *yp;
}
|
以上函数func2效率更高,因为func2只要求3次内存引用(读*xp, 读*yp, 写*xp),而func1需要6次(2次读*xp,2次读*yp,2次写*xp)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//slow
void func1() {
*dest = 0;
for (int i = 0; i < length; i++) {
*dest += data[i];
}
}
//faster
void func2() {
int acc = 0;
for (int i = 0; i < length; i++) {
acc += data[i];
}
*dest = acc;
}
|
消除循环的低效率
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//slow
void func1(char *s) {
long i;
for (i = 0; i < strlen(s); i++) {
...
}
}
//faster
void func2(char *s) {
long i, len = strlen(s);
for (i = 0; i < len; i++) {
...
}
}
|
减少过程调用
使用inline对短小函数进行标识