婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > i++循環與i-–循環的執行效率(遞增與遞減效率)

i++循環與i-–循環的執行效率(遞增與遞減效率)

熱門標簽:嘟聲的電銷機器人 醫院地圖標注 湖北穩定外呼系統 洛陽便宜外呼系統廠家 滄州智能外呼系統收費 電銷機器人怎么收費 忻州外呼系統接口對接 語音平臺系統 地圖標注和圖片標注
昨天同事問了我一個問題,有兩個循環語句:
復制代碼 代碼如下:

for(i = n; i > 0; i--)
{

}

for(i = 0; i n; i++)
{

}

為什么前者比后者快?
我當時的解釋是:
i- -操作本身會影響CPSR(當前程序狀態寄存器),CPSR常見的標志有N(結果為負), Z(結果為0),C(有進位),O(有溢出)。i > 0,可以直接通過Z標志判斷出來。
i++操作也會影響CPSR(當前程序狀態寄存器),但只影響O(有溢出)標志,這對于i n的判斷沒有任何幫助。所以還需要一條額外的比較指令,也就是說每個循環要多執行一條指令。
(這是五年前tjww告訴我的,當時他在AVR上寫一個LCD驅動程序,使用后者LCD會閃爍,使用前者則沒有問題。)
為了確認我的理解是正確的,做了個實驗:
復制代碼 代碼如下:

int loop_dec(int n)
{
int i = 0;
int v = 0;

for(i = n; i > 0; i--)
v +=i;

return v;
}

int loop_inc(int n)
{
int i = 0;
int v = 0;

for(i = 0; i n; i++)
v +=i;

return v;
}

用arm-linux-gcc編譯,然后反匯編:
i--的循環條件:
4c: e51b3014 ldr r3, [fp, #-20]
50: e3530000 cmp r3, #0 ; 0x0
54: cafffff5 bgt 30 loop_dec+0x30>

i++的循環條件:
b8: e51b3018 ldr r3, [fp, #-24]
bc: e1520003 cmp r2, r3
c0: bafffff4 blt 98 loop_inc+0x30>結果和我想象的并不一樣,這是怎么回事呢?我想可能因為沒有加優化選項,于是加上-O選項,結果變為:
i--的循環條件:
14: e2500001 subs r0, r0, #1 ; 0x1
18: 1afffffc bne 10 loop_dec+0x10>

i++的循環條件:
3c: e2833001 add r3, r3, #1 ; 0x1
40: e1500003 cmp r0, r3
44: 1afffffb bne 38 loop_inc+0x14>這下沒錯了,果然少一個cmp指令。
文章出處:http://www.limodev.cn/blog
您可能感興趣的文章:
  • PHP 函數執行效率的小比較
  • 提高ASP頁面執行效率的方法分析
  • 優化innerHTML操作(提高代碼執行效率)
  • 根據mysql慢日志監控SQL語句執行效率
  • JavaScript執行效率與性能提升方案
  • 查詢mysql中執行效率低的sql語句的方法
  • Oracle提高sql執行效率的心得建議
  • 分享50個提高PHP執行效率的技巧

標簽:防城港 宜賓 巴彥淖爾 日照 定州 山南 內蒙古 96

巨人網絡通訊聲明:本文標題《i++循環與i-–循環的執行效率(遞增與遞減效率)》,本文關鍵詞  i++,循環,與,的,執行,效率,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《i++循環與i-–循環的執行效率(遞增與遞減效率)》相關的同類信息!
  • 本頁收集關于i++循環與i-–循環的執行效率(遞增與遞減效率)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 西峡县| 鄂托克前旗| 朝阳区| 马山县| 托里县| 宝坻区| 游戏| 分宜县| 阿坝县| 开封县| 上饶市| 房产| 屯昌县| 铁岭县| 循化| 禄劝| 双柏县| 郸城县| 宜州市| 万山特区| 大宁县| 佛教| 太康县| 泗洪县| 彰武县| 岫岩| 德兴市| 观塘区| 嘉黎县| 江都市| 茶陵县| 长汀县| 英超| 甘南县| 娄烦县| 乐至县| 京山县| 彰化县| 甘南县| 湘阴县| 壶关县|