最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

i++循環(huán)與i-–循環(huán)的執(zhí)行效率(遞增與遞減效率)

 更新時(shí)間:2011年01月05日 23:44:05   作者:  
i++循環(huán)與i-–循環(huán)的執(zhí)行效率(遞增與遞減效率),需要的朋友可以參考下。
昨天同事問(wèn)了我一個(gè)問(wèn)題,有兩個(gè)循環(huán)語(yǔ)句:
復(fù)制代碼 代碼如下:

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

}

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

}

為什么前者比后者快?
我當(dāng)時(shí)的解釋是:
i- -操作本身會(huì)影響CPSR(當(dāng)前程序狀態(tài)寄存器),CPSR常見(jiàn)的標(biāo)志有N(結(jié)果為負(fù)), Z(結(jié)果為0),C(有進(jìn)位),O(有溢出)。i > 0,可以直接通過(guò)Z標(biāo)志判斷出來(lái)。
i++操作也會(huì)影響CPSR(當(dāng)前程序狀態(tài)寄存器),但只影響O(有溢出)標(biāo)志,這對(duì)于i < n的判斷沒(méi)有任何幫助。所以還需要一條額外的比較指令,也就是說(shuō)每個(gè)循環(huán)要多執(zhí)行一條指令。
(這是五年前tjww告訴我的,當(dāng)時(shí)他在A(yíng)VR上寫(xiě)一個(gè)LCD驅(qū)動(dòng)程序,使用后者LCD會(huì)閃爍,使用前者則沒(méi)有問(wèn)題。)
為了確認(rèn)我的理解是正確的,做了個(gè)實(shí)驗(yàn):
復(fù)制代碼 代碼如下:

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--的循環(huán)條件:
4c: e51b3014 ldr r3, [fp, #-20]
50: e3530000 cmp r3, #0 ; 0x0
54: cafffff5 bgt 30 <loop_dec+0x30>

i++的循環(huán)條件:
b8: e51b3018 ldr r3, [fp, #-24]
bc: e1520003 cmp r2, r3
c0: bafffff4 blt 98 <loop_inc+0x30>結(jié)果和我想象的并不一樣,這是怎么回事呢?我想可能因?yàn)闆](méi)有加優(yōu)化選項(xiàng),于是加上-O選項(xiàng),結(jié)果變?yōu)椋?
i--的循環(huán)條件:
14: e2500001 subs r0, r0, #1 ; 0x1
18: 1afffffc bne 10 <loop_dec+0x10>

i++的循環(huán)條件:
3c: e2833001 add r3, r3, #1 ; 0x1
40: e1500003 cmp r0, r3
44: 1afffffb bne 38 <loop_inc+0x14>這下沒(méi)錯(cuò)了,果然少一個(gè)cmp指令。
文章出處:http://www.limodev.cn/blog

相關(guān)文章

  • 一個(gè)批量編碼轉(zhuǎn)換及ASP/JS加解密/簡(jiǎn)繁轉(zhuǎn)換的工具

    一個(gè)批量編碼轉(zhuǎn)換及ASP/JS加解密/簡(jiǎn)繁轉(zhuǎn)換的工具

    一個(gè)批量編碼轉(zhuǎn)換及ASP/JS加解密/簡(jiǎn)繁轉(zhuǎn)換的工具...
    2007-05-05
  • flash 擋住層的解決方法

    flash 擋住層的解決方法

    使用層制作的下拉菜單下正好有FLASH動(dòng)畫(huà),菜單被動(dòng)畫(huà)遮擋.
    2009-08-08
  • Clion ROS開(kāi)發(fā)環(huán)境設(shè)置技巧

    Clion ROS開(kāi)發(fā)環(huán)境設(shè)置技巧

    這篇文章主要介紹了Clion ROS開(kāi)發(fā)環(huán)境設(shè)置技巧,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Git 撤銷(xiāo)操作、刪除文件和恢復(fù)文件

    Git 撤銷(xiāo)操作、刪除文件和恢復(fù)文件

    本文主要介紹了Git撤銷(xiāo)操作、刪除文件和恢復(fù)文件的方法。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • git中ssh key配置詳解

    git中ssh key配置詳解

    這篇文章主要介紹了git中ssh key配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • vscode代碼格式化和eslint的使用

    vscode代碼格式化和eslint的使用

    這篇文章主要介紹了vscode代碼格式化和eslint的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 2020年最火的6種編程語(yǔ)言推薦

    2020年最火的6種編程語(yǔ)言推薦

    當(dāng)下計(jì)算機(jī)編程語(yǔ)言總數(shù)達(dá)到好幾萬(wàn)種,但是最流行的編程語(yǔ)言有哪些呢,今天,小編就給大家盤(pán)點(diǎn)一下2020年很受歡迎的編程語(yǔ)言,感興趣的朋友一起看看吧
    2020-07-07
  • 命令行下的2款網(wǎng)頁(yè)截圖工具推薦

    命令行下的2款網(wǎng)頁(yè)截圖工具推薦

    這篇文章主要介紹了命令行下的2款網(wǎng)頁(yè)截圖工具推薦,分別是針對(duì)IE瀏覽器的IECapt和針對(duì)Firefox瀏覽器的PageSaver,需要的朋友可以參考下
    2014-07-07
  • 使用Git工具實(shí)現(xiàn)上傳本地項(xiàng)目到GitHub的方法

    使用Git工具實(shí)現(xiàn)上傳本地項(xiàng)目到GitHub的方法

    這篇文章主要介紹了使用Git工具實(shí)現(xiàn)上傳本地項(xiàng)目到GitHub的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • IntelliJ IDEA卡死,如何優(yōu)化內(nèi)存

    IntelliJ IDEA卡死,如何優(yōu)化內(nèi)存

    這篇文章主要介紹了IntelliJ IDEA卡死,如何優(yōu)化內(nèi)存,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論

柯坪县| 宜阳县| 绥芬河市| 交城县| 周宁县| 苍南县| 肥城市| 靖安县| 潼南县| 南汇区| 建平县| 南宫市| 墨竹工卡县| 宁明县| 蕉岭县| 牡丹江市| 威海市| 岚皋县| 钟祥市| 广平县| 浦北县| 东城区| 白沙| 环江| 青阳县| 平罗县| 兴国县| 尤溪县| 离岛区| 龙江县| 西峡县| 正安县| 巴林左旗| 万源市| 隆德县| 东山县| 雷波县| 泊头市| 泰宁县| 固镇县| 陆丰市|