示例:如下代碼效率不高。
for (row = 0; row < 100; row++)
{
for (col = 0; col < 5; col++)
{
sum += a[row][col];
}
}
可以改為如下方式,以提高效率。
for (col = 0; col < 5; col++)
{
for (row = 0; row < 100; row++)
{
sum += a[row][col];
}
}
½8-9 :盡量減少循環嵌套層次
½8-10 :避免循環體內含判斷語句,應將循環語句置于判斷語句的代碼塊之中
說明:目的是減少判斷次數。循環體中的判斷語句是否可以移到循環體外,要視程序的具體情況而言,一般情況,與循環變量無關的判斷語句可以移到循環體外,而有關的則不可以。
示例:如下代碼效率稍低。
for (ind = 0; ind < MAX_RECT_NUMBER; ind++)
{
if (data_type == RECT_AREA)
{
area_sum += rect_area[ind];
}
else
{
rect_length_sum += rect[ind].length;
rect_width_sum += rect[ind].width;
}
}
因為判斷語句與循環變量無關,故可如下改進,以減少判斷次數。
if (data_type == RECT_AREA)
{
for (ind = 0; ind < MAX_RECT_NUMBER; ind++)
{
area_sum += rect_area[ind];
}
}
else
{
for (ind = 0; ind < MAX_RECT_NUMBER; ind++)
{
rect_length_sum += rect[ind].length;
rect_width_sum += rect[ind].width;
}
}
½8-11 :盡量用乘法或其它方法代替除法,特別是浮點運算中的除法
說明:浮點運算除法要占用較多CPU資源。
示例:如下表達式運算可能要占較多CPU資源。
#define PAI 3.1416
radius = circle_length / (2 * PAI);
應如下把浮點除法改為浮點乘法。
#define PAI_RECIPROCAL (1 / 3.1416 ) // 編譯器編譯時,將生成具體浮點數
radius = circle_length * PAI_RECIPROCAL / 2;
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/