1.整数取模优化
因为C语言中的模运算%开销大,所以用
value += dalta;
if (value > size)
value -= size;
代替
value = (value + delta) % size;
2.用宏定义代替简单函数,减少函数调用开销,但是避免在递归调用的语句中使用。
用
#define MAX(x, y) ( (x) > (y) ? (x) : (y) )
代替
int max(x, y){
return x > y ? x : y;
}
3. 顺序搜索的时候用哨兵合并测试条件
用
int search(int array[], int size, int value){
//array长度为size + 1
int array[size] = value;
int i;
while (array[i] != value)
i++;
if (i == size)
return -1;
else
return i;
}
代替
int search(int array[], int size, int value){
int i;
for (ij = 0; i < size; i++)
if (array[i] == value)
return i;
return -1;
}
4.顺序搜索的时候用展开循环来消除自增,循环展开有利于避免管道阻塞,减少分支,增加指令并行性。
用
int search(int array[], int size, int value){
//array长度为size + 1
int array[size] = value;
int i;
while (array[i] != value){
if (array[i] == value)
break;
if (array[i + 1] == value){
i += 1;
break;
}
if (array[i + 2] == value){
i += 2;
break;
}
if (array[i + 3] == value){
i += 1;
break;
}
if (array[i + 1] == value){
i += 3;
break;
}
if (array[i + 4] == value){
i += 4;
break;
}
i += 5;
}
if (i == size)
return -1;
else
return i;
}
代替
int search(int array[], int size, int value){
//array长度为size + 1
int array[size] = value;
int i;
while (array[i] != value)
i++;
if (i == size)
return -1;
else
return i;
}