程式碼最佳化試驗——短迴圈最佳化(下) (轉)
測試2
#include
#include
void sum4()
{
int j = 0;
for (unsigned i = 1; i < 630001;)
{
j += i++;
j += i++;
j += i++;
j += i++;
}
}
:namespace prefix = o ns = "urn:schemas--com::office" />
void sum5()
{
int j = 0;
for (unsigned i = 1; i < 630001;)
{
j += i++;
j += i++;
j += i++;
j += i++;
j += i++;
}
}
int main()
{
int i, j; Timer timer;
timer.Start();
for (i = 0; i < 5; i++) sum4();
cout << "sum4 : " << timer.GetTime() << endl;
timer.Start();
sum4();sum4();sum4();sum4();sum4();
cout << "sum4E : " << timer.GetTime() << endl;
timer.Start();
for (i = 0; i < 5; i++) sum5();
cout << "sum5 : " << timer.GetTime() << endl;
timer.Start();
sum5();sum5();sum5();sum5();sum5();
cout << "sum5E : " << timer.GetTime() << endl;
timer.Start();
for (i = 0; i < 100; i++) sum4();
cout << "sum4H : " << timer.GetTime() << endl;
timer.Start();
for (i = 0; i < 100; i++) sum5();
cout << "sum5H : " << timer.GetTime() << endl;
timer.Start();
for (i = 0; i < 1000; i++)
for (j = 0; j < 5; j++) sum4();
cout << "sum4T : " << timer.GetTime() << endl;
timer.Start();
for (i = 0; i < 1000; i++)
{sum4();sum4();sum4();sum4();sum4();}
cout << "sum4TE: " << timer.GetTime() << endl;
for (i = 0; i < 1000; i++)
for (j = 0; j < 5; j++) sum5();
cout << "sum5T : " << timer.GetTime() << endl;
timer.Start();
for (i = 0; i < 1000; i++)
{sum5();sum5();sum5();sum5();sum5();}
cout << "sum5TE: " << timer.GetTime() << endl;
return 0;
}
測試結果2
Sum4
Sum4E
Sum5
Sum5E
Sum4H
Sum5H
Sum4T
Sum4TE
Sum5T
Sum5TE
VC6 Release,生成大小57,344B,以下時間單位ms
8.781
8.45918
7.54705
7.54677
174.909
152.656
8672.62
8794.3
16433.9
7633.09
BCC32,生成檔案大小140,800B,以下時間單位ms
8.5874
8.91789
8.61534
7.64287
169.769
180.58
8548.64
8758.32
17586.1
7835.57
這個表是個大致趨勢,更多的資料我就不列了。這個結果頗出乎我的預料,變化很不規律,我得出以下結論,還望大家商榷:
1. 如果是單層迴圈,短迴圈不需要展開,提升不明顯。對於BCC32,更不需要展開,由於的,展開後還不如原來的。但是對於原來就很高效的,BCC32展開還是能帶來提升的。
2. 對於不能展開的單層短迴圈,VC6和迴圈體內的效能一致,BCC32由於有最佳化,結果出現了倒退。
3. 對於多層迴圈的內迴圈短迴圈,如果原來函式的效能不是很好,展開的效果並不明顯,這裡是出現了倒退。最奇怪的是原來效能最好的sum5,在不展開的情況下居然效能那麼差,展開後竟又是效能最好的了,提高了一倍多,真是怪事。
綜上,對於原來效能好的函式,短迴圈展開能提升效能;如果你對自己的程式碼沒信心,就不要展開了,有時會適得其反。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-958681/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式碼最佳化試驗——短迴圈最佳化(上) (轉)
- MySQL 分表最佳化試驗程式碼MySql
- Sql 巢狀迴圈最佳化案例SQL巢狀
- 降低程式碼圈複雜度最佳化技巧複雜度
- 最佳化兩個簡單的巢狀迴圈巢狀
- Delphi 程式碼最佳化——字串篇 (轉)字串
- 短影片app原始碼,藉助輪詢最佳化互動體驗APP原始碼
- vivo 短影片體驗與成本最佳化實踐
- selenium最佳化後的測試程式碼
- Delphi程式碼最佳化 完結篇 (轉)
- C++ 層次程式碼最佳化 (轉)C++
- dotnet 程式碼最佳化 聊聊邏輯圈複雜度複雜度
- Delphi程式碼最佳化(二) 整數篇 (轉)
- Delphi程式碼最佳化(三) 浮點篇 (轉)
- C程式最佳化之路 (轉)C程式
- 程式碼最佳化記錄
- C++程式碼最佳化方法總結(一) (轉)C++
- C++程式碼最佳化方法總結(四) (轉)C++
- C++程式碼最佳化方法總結(三) (轉)C++
- C++程式碼最佳化方法總結(二) (轉)C++
- vivo短影片使用者訪問體驗最佳化實踐
- vivo 短影片使用者訪問體驗最佳化實踐
- C程式最佳化之路(二) (轉)C程式
- C程式最佳化之路(三) (轉)C程式
- 使用內部和匿名類最佳化Java程式碼(轉)Java
- 效能最佳化 = 改改程式碼?
- 用OO思想最佳化程式碼
- 記錄一次 postgresql 最佳化案例( 巢狀迴圈改HASH JOIN )SQL巢狀
- [JavaScript] 事件委託以及 Vue 列表迴圈事件繫結的效能最佳化JavaScript事件Vue
- 微課sql最佳化(17)、不改程式碼,最佳化SQL(1)-最佳化方法總結SQL
- 程式碼日數:高階迴圈
- MySQL最佳化經驗MySql
- 如何最佳化短影片排名?小馬識途營銷顧問分享短影片SEO最佳化實戰技巧
- 關於C++程式碼最佳化的方法總結(轉)C++
- Oracle效能最佳化之SQL最佳化(轉)OracleSQL
- 一個註解@Recover搞定醜陋的迴圈重試程式碼
- 14,javase程式碼實戰-迴圈控制——foreach迴圈的使用(五)Java
- 24個PHP程式碼最佳化技巧PHP