程序性能优化

本文记录优化程序性能的笔记

减少内存引用

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对短小函数进行标识

updatedupdated2021-11-062021-11-06