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

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

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

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

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

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

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

while 和 do ...while

用while循環(huán)時有以下兩種循環(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ù)膶ρh(huán)做展開

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

舊代碼:

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)時間節(jié)約了90%。不過注意: 對于中間變量或結(jié)果被更改的循環(huán),編譯程序往往拒絕展開,這時候就需要你自己來做展開工作了。

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

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

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

舊代碼:

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)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11045

    瀏覽量

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

    關(guān)注

    180

    文章

    7630

    瀏覽量

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

    關(guān)注

    30

    文章

    4891

    瀏覽量

    70299
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    C語言中宏定義的應用

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    C語言中的宏是什么

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

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

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

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

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

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

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

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

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

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

    的語句組成,這些語句用于完成特定的任務或操作。在C語言中,每個語句都以分號結(jié)束,多個語句可以用大括號括起來形成一個語句塊。在順序結(jié)構(gòu)中,每個語句都依次執(zhí)行,按照代碼的順序
    的頭像 發(fā)表于 11-22 10:20 ?1437次閱讀

    c語言中邏輯真等價于什么

    語言中,條件表達式的結(jié)果只能是真(非零)或假(零)。如果條件滿足,即條件結(jié)果為真,則可以執(zhí)行相應的代碼塊或完成特定的操作。相反,如果條件不滿足,則執(zhí)行其他
    的頭像 發(fā)表于 11-30 14:10 ?2720次閱讀
    主站蜘蛛池模板: 一区二区三区四区免费视频 | 国产精品亚洲一区二区三区在线播放 | 日韩精品视频免费在线观看 | 激情都市亚洲 | 色播.com| 五月天婷婷网址 | www.色黄| 三级理论在线观看 | 欧美极品另类 | 国产成人啪午夜精品网站 | 国产又黄又爽又猛的免费视频播放 | 婷婷丁香五月中文字幕 | 又粗又硬又猛又黄的免费视频黑人 | 欧美乱码视频 | 成人精品福利 | 成人国产永久福利看片 | 久久成人国产 | 一级视频片| 国产网站免费 | 久久精品国产亚洲aa | 免费一级毛片女人图片 | 91福利视频网 | 午夜久久久 | 久久这里只有精品免费视频 | 一本大道一卡二卡 | 一级毛片一级毛片一级毛片 | 欧美一级片在线免费观看 | 欧美一区二区三区视频 | 欧美1314www伊人久久香网 | 两性色午夜视频免费老司机 | 天堂视频在线视频观看2018 | 日本国产高清色www视频在线 | 好硬好湿好爽再深一点h视频 | 影音先锋ady69色资源网站 | 男人天堂色男人 | 久久夜色tv网站免费影院 | 亚洲综合激情六月婷婷在线观看 | 欧美色图综合 | 狠狠色噜噜狠狠狠狠米奇777 | 天天综合网站 | 欧美日韩高清一区 |