校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 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-–循環的執行效率(遞增與遞減效率)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 永泰县| 阜康市| 章丘市| 阿拉善右旗| 卓资县| 方山县| 如东县| 台安县| 鸡东县| 徐闻县| 朝阳市| 德州市| 徐闻县| 苏尼特左旗| 揭阳市| 连山| 水富县| 临泽县| 荔波县| 名山县| 会东县| 株洲市| 绥棱县| 朔州市| 那曲县| 阆中市| 庆元县| 田林县| 镇原县| 获嘉县| 江达县| 黎平县| 昌吉市| 双柏县| 常宁市| SHOW| 苏尼特左旗| 金山区| 阳高县| 辛集市| 崇礼县|