0 ); 在這兩種循環(huán)中,使用do…while循環(huán)編譯后生成的代碼的長度短于while循環(huán),而且do...while循環(huán)大多數(shù)時(shí)候更可靠,具備更好的容錯(cuò)性。 適當(dāng)?shù)膶?duì)循環(huán)做展開 這是經(jīng)典的速度優(yōu)化,但許多編譯程序(如gcc -funroll-loops)能自動(dòng)完成這個(gè)事,所以現(xiàn)在你自己來優(yōu)化這個(gè)顯得效果不明顯。 舊代碼: for (i = 0 ; i 10" />

在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言中如何優(yōu)化代碼的執(zhí)行效率

麥辣雞腿堡 ? 來源:軒哥談芯 ? 作者:Debug ? 2023-11-20 18:09 ? 次閱讀

while 和 do ...while

用while循環(huán)時(shí)有以下兩種循環(huán)形式:

unsigned int i;
i=0;
while (i< 1000)
{
   i++;
   //用戶程序
}

或:

unsigned int i;
i=1000;
do
{
   i--;
   //用戶程序
}
while (i >0);

在這兩種循環(huán)中,使用do…while循環(huán)編譯后生成的代碼的長度短于while循環(huán),而且do...while循環(huán)大多數(shù)時(shí)候更可靠,具備更好的容錯(cuò)性。

適當(dāng)?shù)膶?duì)循環(huán)做展開

這是經(jīng)典的速度優(yōu)化,但許多編譯程序(如gcc -funroll-loops)能自動(dòng)完成這個(gè)事,所以現(xiàn)在你自己來優(yōu)化這個(gè)顯得效果不明顯。

舊代碼:

for (i = 0; i < 100; i++)
{
  do_stuff(i);
}

新代碼:

for (i = 0; i < 10; )
{
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
}

可以看出,新代碼里比較指令由100次降低為10次,循環(huán)時(shí)間節(jié)約了90%。不過注意: 對(duì)于中間變量或結(jié)果被更改的循環(huán),編譯程序往往拒絕展開,這時(shí)候就需要你自己來做展開工作了。

還有一點(diǎn)需要注意,在有內(nèi)部指令cache的CPU上(如MMX芯片),因?yàn)檠h(huán)展開的代碼很大,往往會(huì)導(dǎo)致cache溢出,這時(shí)展開的代碼會(huì)頻繁地在CPU 的cache和內(nèi)存之間調(diào)來調(diào)去,又因?yàn)閏ache速度很高,所以此時(shí)循環(huán)展開反而會(huì)變慢。還有就是循環(huán)展開會(huì)影響矢量運(yùn)算優(yōu)化。

相同循環(huán)條件的嵌套起來

把相關(guān)循環(huán)放到一個(gè)循環(huán)里,也會(huì)加快速度。

舊代碼:

for (i = 0; i < MAX; i++)         /* initialize 2d array to 0's */
    for (j = 0; j < MAX; j++)
        a[i][j] = 0.0;
    for (i = 0; i < MAX; i++)        /* put 1's along the diagonal */
        a[i][i] = 1.0;

新代碼:

for (i = 0; i < MAX; i++)         /* initialize 2d array to 0's */
{
    for (j = 0; j < MAX; j++)
        a[i][j] = 0.0;
    a[i][i] = 1.0;                            /* put 1's along the diagonal */
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10877

    瀏覽量

    212129
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7608

    瀏覽量

    137084
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4798

    瀏覽量

    68728
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語言中宏定義的應(yīng)用

    C語言中,宏定義是一種預(yù)處理指令,用于在代碼中定義和使用常量、函數(shù)或代碼片段的替代。
    發(fā)表于 08-17 15:33 ?869次閱讀

    C語言中for循環(huán)的用法和應(yīng)用 C語言中for循環(huán)與while循環(huán)的區(qū)別

    C語言中的循環(huán)結(jié)構(gòu)時(shí),for循環(huán)是最常用的一種。它允許重復(fù)執(zhí)行一段代碼,直到滿足特定條件為止。
    發(fā)表于 08-18 16:33 ?3313次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環(huán)的用法和應(yīng)用 <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環(huán)與while循環(huán)的區(qū)別

    編程語言中一個(gè)奇怪的代碼結(jié)構(gòu)

    C語言C++等編程語言中,我們常常會(huì)遇到一個(gè)奇怪的代碼結(jié)構(gòu)。
    發(fā)表于 11-01 10:24 ?457次閱讀
    編程<b class='flag-5'>語言中</b>一個(gè)奇怪的<b class='flag-5'>代碼</b>結(jié)構(gòu)

    C語言優(yōu)化小技巧

    在編寫C語言程序后,經(jīng)常需要對(duì)源碼進(jìn)行優(yōu)化,以提高程序的運(yùn)行效率,下面簡述幾個(gè)常用的優(yōu)化技巧以供大家參考:1.
    發(fā)表于 04-24 14:13

    C語言優(yōu)化小技巧

    `在編寫C語言程序后,經(jīng)常需要對(duì)源碼進(jìn)行優(yōu)化,以提高程序的運(yùn)行效率,下面簡述幾個(gè)常用的優(yōu)化技巧以供大家參考:1.
    發(fā)表于 04-11 15:08

    C語言優(yōu)化小技巧

    在編寫C語言程序后,經(jīng)常需要對(duì)源碼進(jìn)行優(yōu)化,以提高程序的運(yùn)行效率,下面簡述幾個(gè)常用的優(yōu)化技巧以供大家參考:1.
    發(fā)表于 09-23 14:10

    C語言優(yōu)化小技巧

    C語言優(yōu)化小技巧在編寫C語言程序后,經(jīng)常需要對(duì)源碼進(jìn)行優(yōu)化,以提高程序的運(yùn)行
    發(fā)表于 10-13 14:34

    請(qǐng)問C語言中ASCII代碼是什么意思?

    C語言中ASCII代碼是什么意思常見的ASCII代碼都需要記嗎
    發(fā)表于 04-28 07:35

    C語言中斷言如何去使用

    文章目錄1 C語言中斷言的使用1.1 處理方式1.2 原型定義1.3 示例代碼1 C語言中斷言的使用1.1 處理方式如果斷言的條件返回錯(cuò)誤,
    發(fā)表于 07-14 08:15

    C語言中的宏是什么

    第五章 性能優(yōu)化5.1 使用宏定義  在C語言中,宏是產(chǎn)生內(nèi)嵌代碼的唯一方法。對(duì)于嵌入式系統(tǒng)而言,為了能達(dá)到性能要求,宏是一種很好的代替函數(shù)的方法。  寫一個(gè)"標(biāo)準(zhǔn)"宏MIN ,這個(gè)宏
    發(fā)表于 12-15 08:20

    C語言中ASCII代碼是什么意思?

    C語言中ASCII代碼是什么意思常見的ASCII代碼都需要記嗎
    發(fā)表于 10-25 07:10

    C語言中隨機(jī)數(shù)的生成代碼

    C語言中隨機(jī)數(shù)的生成完整代碼
    的頭像 發(fā)表于 02-20 09:21 ?1w次閱讀

    C語言高效編程與代碼優(yōu)化

    翻譯作者:碼農(nóng)網(wǎng) gunner 在本篇文章中,我收集了很多經(jīng)驗(yàn)和方法。應(yīng)用這些經(jīng)驗(yàn)和方法,可以幫助我們從執(zhí)行速度和內(nèi)存使用等方面來優(yōu)化C語言代碼
    的頭像 發(fā)表于 10-19 17:04 ?1687次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>高效編程與<b class='flag-5'>代碼</b><b class='flag-5'>優(yōu)化</b>

    在標(biāo)準(zhǔn)C語言中編譯出來的可執(zhí)行程序

    在標(biāo)準(zhǔn)C語言中,編譯出來的可執(zhí)行程序分為代碼區(qū)(text)、數(shù)據(jù)區(qū)(data)和未初始化數(shù)據(jù)區(qū)(bss)3個(gè)部分。如下代碼
    的頭像 發(fā)表于 06-16 09:01 ?1921次閱讀
    在標(biāo)準(zhǔn)<b class='flag-5'>C</b><b class='flag-5'>語言中</b>編譯出來的可<b class='flag-5'>執(zhí)行</b>程序

    c語言中順序結(jié)構(gòu)的基本流程

    的語句組成,這些語句用于完成特定的任務(wù)或操作。在C語言中,每個(gè)語句都以分號(hào)結(jié)束,多個(gè)語句可以用大括號(hào)括起來形成一個(gè)語句塊。在順序結(jié)構(gòu)中,每個(gè)語句都依次執(zhí)行,按照代碼的順序
    的頭像 發(fā)表于 11-22 10:20 ?1060次閱讀
    主站蜘蛛池模板: 69日本xxxxxxxxx30| 恨恨操| 天天做人人爱夜夜爽2020| 天天干天天爱天天操| 国产免费美女| 免费精品| 女人张开腿让男人桶视频免费大全| 亚洲狠狠婷婷综合久久久久图片| 清朝荒淫牲艳史在线播放| 免费啪视频观在线视频在线| 国产一级影院| 日本免费黄色网址| 天天夜天天干| 午夜国产| 天天天天做夜夜夜夜做| 人人免费操| 91网站在线看| 日本人69xxx| 51xtv成人影院| 操操干| 在线视频91| 亚洲一区在线播放| 亚洲免费网站在线观看| 亚洲一区二区影视| 在线天堂中文官网| 亚洲电影在线| 欧美人另类zooz| 美女毛片免费看| 免费看欧美一级特黄a大片| 国产nv精品你懂得| 操美女在线看| 77788色淫视频免费观看| 91精品国产91久久久久久青草| 四虎884tt紧急大通知| 欧美午夜网站| 国产精品资源在线观看| а8天堂资源在线官网| 久久精品国产免费高清| 亚洲香蕉影院| 色吧视频| 久久婷婷综合五月一区二区|