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

女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

完善資料讓更多小伙伴認(rèn)識你,還能領(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ù)時候更可靠,具備更好的容錯性。

適當(dāng)?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),編譯程序往往拒絕展開,這時候就需要你自己來做展開工作了。

還有一點(diǎn)需要注意,在有內(nèi)部指令cache的CPU上(如MMX芯片),因?yàn)檠h(huán)展開的代碼很大,往往會導(dǎo)致cache溢出,這時展開的代碼會頻繁地在CPU 的cache和內(nèi)存之間調(diào)來調(diào)去,又因?yàn)閏ache速度很高,所以此時循環(huán)展開反而會變慢。還有就是循環(huán)展開會影響矢量運(yù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)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11029

    瀏覽量

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

    關(guān)注

    180

    文章

    7630

    瀏覽量

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

    關(guān)注

    30

    文章

    4886

    瀏覽量

    70216
收藏 人收藏

    評論

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

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

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

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

    C語言中的循環(huán)結(jié)構(gòu)時,for循環(huán)是最常用的一種。它允許重復(fù)執(zhí)行一段代碼,直到滿足特定條件為止。
    發(fā)表于 08-18 16:33 ?3818次閱讀
    <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ū)別

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

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

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

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

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

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

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

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

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

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

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

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

    C語言中斷言如何去使用

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

    C語言中的宏是什么

    第五章 性能優(yōu)化5.1 使用宏定義  在C語言中,宏是產(chǎn)生內(nèi)嵌代碼的唯一方法。對于嵌入式系統(tǒng)而言,為了能達(dá)到性能要求,宏是一種很好的代替函數(shù)的方法。  寫一個"標(biāo)準(zhǔn)"宏MIN ,這個宏
    發(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 ?1.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 ?1845次閱讀
    <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個部分。如下代碼
    的頭像 發(fā)表于 06-16 09:01 ?2147次閱讀
    在標(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語言中,每個語句都以分號結(jié)束,多個語句可以用大括號括起來形成一個語句塊。在順序結(jié)構(gòu)中,每個語句都依次執(zhí)行,按照代碼的順序
    的頭像 發(fā)表于 11-22 10:20 ?1400次閱讀