优化程序性能

将无需重复执行的代码移出循环

优化前

let str = String(repeating: "a", count: 10_0000)

var i = 0
while i < strlen(str) {
    i += 1
}

优化后

优化前每次循环都会执行一次strlen(),优化后将只需执行一次的strlen()移出循环; 而for-in与while不同,strlen()执行一次生成迭代器之后就不再执行strlen()

let len = strlen(str)

var i = 0
while i < len {
    i += 1
}
for i in 0..<strlen(str) {
    
}

将频繁的内存引用合并为一次内存引用

优化前

long *d = malloc(sizeof(long));
int *a = malloc(sizeof(int) * 100000);
for (int i = 0; i < 100000; i++) {
    a[i] = i;
}

for (int i = 0; i < 100000; i++) {
    *d += a[i];
}

优化后

long t = 0;

for (int i = 0; i < 100000; i++) {
    t += a[i];
}

*d = t;

循环展开

优化前

优化后

int i;

for (i = 0; i < 100000 - 1; i+=2) {
    *d += (a[i] + a[i+1]);
}

for (; i < 100000; i++) {
    *d += a[i];
}