一位优秀的程序员应该时刻注意两点:
1.写高效的代码,
2.写易懂的代码.
这两点同样重要,书写代码的过程中应当时刻注意.当两者发生冲突时应该考虑在该代码片段谁更重要,择其重者而从之.
以下我将记录一些与此话题相关的例子.
1. switch 语句中,应该将经常出现的case放在前面,将不常出现的case放在后面.从面提高效率.
比如,在处理窗口消息的函数中,WM_CREATE, WM_DESTROY,等在整个进程活动周期中只被调用一次,故应该放在switch的最后.
当然,同样也适用于if判断的情形.
2. for循环语句的结束条件尽可能的简单.考虑下面这个例子:
Status=NDIS_STATUS_UNSUPPORTED_MEDIA;
for (i=0; i<MediumArraySize &&; i++) {
if (MediumArray == NdisMedium802_3) {
*SelectedMediumIndex = i;
Status=NDIS_STATUS_SUCCESS;
} /* endif */
}
每循环一次,程序都要判断 Status!=NDIS_STATUS_SUCCESS 是否满足,就是说,如果这个循环要执行1000次,CPU就要多执行1000个判断语句.而这个C语句应该需要2条汇编才能完成. 如果改成以下代码情形就大不一样了.
Status=NDIS_STATUS_SUCCESS;
for (i=0; i<MediumArraySize &&; i++) {
if (MediumArray == NdisMedium802_3) {
*SelectedMediumIndex = i;
break;
} /* endif */
}
if( i==MediumArraySize ) Status=NDIS_STATUS_UNSUPPORTED_MEDIA;
3.优化代码,尽量不要用乘除求余等语句,因为这种语句一条就需要若干条汇编指令,效率很低。常用的做法有:
乘以2的倍数可以用左移来替代,除以2的倍数可以用右移来替代。对2的倍数减1求余用2的倍数求与替代。
a*8 == a<<3 a/8 == a>>3 a%7 == a
1.写高效的代码,
2.写易懂的代码.
这两点同样重要,书写代码的过程中应当时刻注意.当两者发生冲突时应该考虑在该代码片段谁更重要,择其重者而从之.
以下我将记录一些与此话题相关的例子.
1. switch 语句中,应该将经常出现的case放在前面,将不常出现的case放在后面.从面提高效率.
比如,在处理窗口消息的函数中,WM_CREATE, WM_DESTROY,等在整个进程活动周期中只被调用一次,故应该放在switch的最后.
当然,同样也适用于if判断的情形.
2. for循环语句的结束条件尽可能的简单.考虑下面这个例子:
Status=NDIS_STATUS_UNSUPPORTED_MEDIA;
for (i=0; i<MediumArraySize &&; i++) {
if (MediumArray == NdisMedium802_3) {
*SelectedMediumIndex = i;
Status=NDIS_STATUS_SUCCESS;
} /* endif */
}
每循环一次,程序都要判断 Status!=NDIS_STATUS_SUCCESS 是否满足,就是说,如果这个循环要执行1000次,CPU就要多执行1000个判断语句.而这个C语句应该需要2条汇编才能完成. 如果改成以下代码情形就大不一样了.
Status=NDIS_STATUS_SUCCESS;
for (i=0; i<MediumArraySize &&; i++) {
if (MediumArray == NdisMedium802_3) {
*SelectedMediumIndex = i;
break;
} /* endif */
}
if( i==MediumArraySize ) Status=NDIS_STATUS_UNSUPPORTED_MEDIA;
3.优化代码,尽量不要用乘除求余等语句,因为这种语句一条就需要若干条汇编指令,效率很低。常用的做法有:
乘以2的倍数可以用左移来替代,除以2的倍数可以用右移来替代。对2的倍数减1求余用2的倍数求与替代。
a*8 == a<<3 a/8 == a>>3 a%7 == a