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

色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

C語言中如何優化代碼的執行效率

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

while 和 do ...while

用while循環時有以下兩種循環形式:

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

或:

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

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

適當的對循環做展開

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

舊代碼:

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

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

相同循環條件的嵌套起來

把相關循環放到一個循環里,也會加快速度。

舊代碼:

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 */
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11029

    瀏覽量

    215862
  • C語言
    +關注

    關注

    180

    文章

    7629

    瀏覽量

    140160
  • 代碼
    +關注

    關注

    30

    文章

    4886

    瀏覽量

    70216
收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    C語言中宏定義的應用

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

    C語言中for循環的用法和應用 C語言中for循環與while循環的區別

    C語言中的循環結構時,for循環是最常用的一種。它允許重復執行一段代碼,直到滿足特定條件為止。
    發表于 08-18 16:33 ?3817次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環的用法和應用 <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環與while循環的區別

    編程語言中一個奇怪的代碼結構

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

    C語言優化小技巧

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

    C語言優化小技巧

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

    C語言優化小技巧

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

    C語言優化小技巧

    C語言優化小技巧在編寫C語言程序后,經常需要對源碼進行優化,以提高程序的運行
    發表于 10-13 14:34

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

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

    C語言中斷言如何去使用

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

    C語言中的宏是什么

    第五章 性能優化5.1 使用宏定義  在C語言中,宏是產生內嵌代碼的唯一方法。對于嵌入式系統而言,為了能達到性能要求,宏是一種很好的代替函數的方法。  寫一個"標準"宏MIN ,這個宏
    發表于 12-15 08:20

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

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

    C語言中隨機數的生成代碼

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

    C語言高效編程與代碼優化

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

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

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

    c語言中順序結構的基本流程

    的語句組成,這些語句用于完成特定的任務或操作。在C語言中,每個語句都以分號結束,多個語句可以用大括號括起來形成一個語句塊。在順序結構中,每個語句都依次執行,按照代碼的順序
    的頭像 發表于 11-22 10:20 ?1395次閱讀
    主站蜘蛛池模板: 老头操美女| 91福利国产在线观看网站 | 国产成人a一在线观看 | 学校捏奶揉下面污文h | 亚洲日韩欧美国产专区 | 良家人妻无码专区九色颜射 | 免费在线视频成人 | 欧美日韩一二区旡码高清在线 | 久久99国产精品一区二区 | 交video| 色橹 | 久久免费精品国产72精品剧情 | 午夜影视不用充钱的免费 | 国产精品1区2区 | 闺蜜撬开我的腿用黄瓜折磨我 | 久久婷婷五月综合色精品首页 | 高清不卡伦理电影在线观看 | 色欲AV精品人妻一区二区三区 | 国产中文视频无码成人精品 | 亚洲AV一宅男色影视 | 古代又黄又肉到湿的爽文 | 国产视频精品在线偷拍 | 大胸美女洗澡扒奶衣挤奶 | 精品国产在线观看福利 | 美国z0069 | 在线精品视频免费观看 | 沟沟人体一区二区 | 豆奶视频在线高清观看 | 国产精品久久久久久52AVAV | 日日噜噜夜夜狠狠视频 | 欧美乱妇15p图 | 日本久久精品视频 | 为什么丈夫插我我却喜欢被打着插 | 新影音先锋男人色资源网 | 色婷婷AV国产精品欧美毛片 | 久久日本精品在线热 | 欧美巨大xxxx做受孕妇视频 | 她也色在线视频站 | 少妇无套内谢久久久久 | 亚洲AV久久无码精品热九九 | 日本护士hd |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品