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ǔ)言拆解循環(huán) 以空間換時(shí)間

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

拆解循環(huán)-以空間換時(shí)間

在編寫循環(huán)處理程序的時(shí)候要充分利用CPU的指令緩存,要充分分解小的循環(huán)。特別是當(dāng)循環(huán)體本身很小的時(shí)候,分解循環(huán)可以提高性能。

這里要注意,很多編譯器并不能自動(dòng)分解循環(huán)。不好的代碼:

// 3D轉(zhuǎn)化:把矢量 V 和 4x4 矩陣 M 相乘
for (i = 0;i < 4;i ++)
{
r[i] = 0;
for (j = 0;j < 4;j ++)
{
r[i] += M[j][i]*V[j];
}
}

推薦的代碼:

r[0] = M[0][0]*V[0] + M[1][0]*V[1] + M[2][0]*V[2] + M[3][0]*V[3];
r[1] = M[0][1]*V[0] + M[1][1]*V[1] + M[2][1]*V[2] + M[3][1]*V[3];
r[2] = M[0][2]*V[0] + M[1][2]*V[1] + M[2][2]*V[2] + M[3][2]*V[3];
r[3] = M[0][3]*V[0] + M[1][3]*V[1] + M[2][3]*V[2] + M[3][3]*v[3];

02

充分提取循環(huán)中的公共部分

對(duì)于一些不需要循環(huán)變量參加運(yùn)算的任務(wù)可以把它們放到循環(huán)外面,這里的任務(wù)包括表達(dá)式、函數(shù)的調(diào)用、指針運(yùn)算、數(shù)組訪問等,應(yīng)該將沒有必要執(zhí)行多次的操作全部集合在一起,放到一個(gè)init的初始化程序中進(jìn)行。

03

延時(shí)函數(shù)中的循環(huán)技巧

通常使用的延時(shí)函數(shù)均采用自加的形式:

void delay (void)
{
  unsigned int i;
  for (i=0;i< 1000;i++) ;
}

將其改為自減延時(shí)函數(shù):

void delay (void)
{
  unsigned int i;
  for (i=1000;i >0;i--) ;
}

兩個(gè)函數(shù)的延時(shí)效果相似,但幾乎所有的C編譯對(duì)后一種函數(shù)生成的代碼均比前一種代碼少13個(gè)字節(jié),因?yàn)閹缀跛械?a target="_blank">MCU均有為0轉(zhuǎn)移的指令,采用后一種方式能夠生成這類指令。在使用while循環(huán)時(shí)也一樣,使用自減指令控制循環(huán)會(huì)比使用自加指令控制循環(huán)生成的代碼更少13個(gè)字母。

但是,在循環(huán)中有通過循環(huán)變量“i”讀寫數(shù)組的指令時(shí),使用預(yù)減循環(huán)有可能使數(shù)組超界,要引起注意。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136861
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3787

    瀏覽量

    81057
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1634

    瀏覽量

    49134
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言基礎(chǔ)知識(shí)(5)--循環(huán)語(yǔ)句

    C語(yǔ)言基礎(chǔ)知識(shí)(5)--循環(huán)語(yǔ)句
    的頭像 發(fā)表于 06-15 10:18 ?2314次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>基礎(chǔ)知識(shí)(5)--<b class='flag-5'>循環(huán)</b>語(yǔ)句

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

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

    C語(yǔ)言循環(huán)結(jié)構(gòu)的使用方法

    詳細(xì)介紹了C語(yǔ)言while循環(huán)結(jié)構(gòu)、do-while循環(huán)結(jié)構(gòu)、for循環(huán)結(jié)構(gòu)、循環(huán)退出語(yǔ)句的語(yǔ)法
    發(fā)表于 11-02 11:26 ?1794次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>循環(huán)</b>結(jié)構(gòu)的使用方法

    C語(yǔ)言for循環(huán)的用法和注意事項(xiàng)

    C 語(yǔ)言是一種廣泛使用的編程語(yǔ)言,它具有簡(jiǎn)潔、高效、靈活的特點(diǎn)。C 語(yǔ)言中有很多控制流程的語(yǔ)句,其中 for
    的頭像 發(fā)表于 11-20 18:27 ?2419次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>for<b class='flag-5'>循環(huán)</b>的用法和注意事項(xiàng)

    C語(yǔ)言入門教程-if語(yǔ)句和while循環(huán)

    if語(yǔ)句和while循環(huán) C語(yǔ)言中,if語(yǔ)句和while循環(huán)都會(huì)用到布爾表達(dá)式。下面是一個(gè)使用if語(yǔ)句的簡(jiǎn)單例子: #include
    發(fā)表于 07-29 10:48 ?8554次閱讀

    C++語(yǔ)言基礎(chǔ)講解視頻do while循環(huán)語(yǔ)句

    C++語(yǔ)言基礎(chǔ)講解視頻do while循環(huán)語(yǔ)句
    發(fā)表于 01-14 15:32 ?5次下載

    C++語(yǔ)言基礎(chǔ)講解視頻while循環(huán)語(yǔ)句

    C++語(yǔ)言基礎(chǔ)講解視頻while循環(huán)語(yǔ)句,喜歡的朋友可以下載來學(xué)習(xí)。
    發(fā)表于 01-14 15:31 ?3次下載

    C語(yǔ)言教程之循環(huán)顯示隨機(jī)數(shù)問題

    C語(yǔ)言教程之循環(huán)顯示隨機(jī)數(shù)問題,很好的C語(yǔ)言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-25 15:03 ?0次下載

    多變循環(huán)彩燈C語(yǔ)言+Proteus軟件仿真參考程序

    此軟件提供多變循環(huán)彩燈C語(yǔ)言+proteus軟件仿真參考程序。
    發(fā)表于 08-30 16:23 ?21次下載
    多變<b class='flag-5'>循環(huán)</b>彩燈<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>+Proteus軟件仿真參考程序

    C語(yǔ)言教程之使用循環(huán)結(jié)構(gòu)設(shè)計(jì)C語(yǔ)言程序的資料說明

    本文檔詳細(xì)介紹的是C語(yǔ)言教程之使用循環(huán)結(jié)構(gòu)設(shè)計(jì)C語(yǔ)言程序的資料說明主要內(nèi)容包括了:1.while循環(huán)
    發(fā)表于 02-15 11:27 ?3次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>教程之使用<b class='flag-5'>循環(huán)</b>結(jié)構(gòu)設(shè)計(jì)<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>程序的資料說明

    C語(yǔ)言的3種循環(huán)結(jié)構(gòu)分析

    C語(yǔ)言循環(huán)結(jié)構(gòu)有for循環(huán)、while循環(huán)、do循環(huán)和goto
    的頭像 發(fā)表于 05-20 13:43 ?1.1w次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的3種<b class='flag-5'>循環(huán)</b>結(jié)構(gòu)分析

    C語(yǔ)言中的數(shù)組空間動(dòng)態(tài)開辟

    C語(yǔ)言中的數(shù)組空間動(dòng)態(tài)開辟 在C語(yǔ)言中,必不可少的需要使用到數(shù)組,通常為了動(dòng)態(tài)的開辟數(shù)組空間,可
    的頭像 發(fā)表于 02-10 12:42 ?2171次閱讀

    C語(yǔ)言循環(huán)與分支-2

    而在c語(yǔ)言中我們經(jīng)常會(huì)需要重復(fù)地進(jìn)行一些指令,但是不斷的編輯重復(fù)代碼不僅很繁瑣,還容易出現(xiàn)bug,因此循環(huán)語(yǔ)句的使用就非常有必要。今天要介紹的就是循環(huán)語(yǔ)句相關(guān)的知識(shí)。
    的頭像 發(fā)表于 02-21 15:35 ?707次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的<b class='flag-5'>循環(huán)</b>與分支-2

    c語(yǔ)言在while中嵌套if循環(huán)

    C語(yǔ)言是一種廣泛使用的面向過程編程語(yǔ)言,它提供了許多控制結(jié)構(gòu)來幫助程序員實(shí)現(xiàn)復(fù)雜的邏輯和流程控制。其中,while循環(huán)和if語(yǔ)句是非常常見和重要的控制結(jié)構(gòu)。本文將詳細(xì)介紹
    的頭像 發(fā)表于 11-22 10:09 ?6187次閱讀

    深入理解C語(yǔ)言循環(huán)語(yǔ)句的應(yīng)用與優(yōu)化技巧

    在程序設(shè)計(jì)中,我們常常需要重復(fù)執(zhí)行某一段代碼。為了提高效率和簡(jiǎn)化代碼,循環(huán)語(yǔ)句應(yīng)運(yùn)而生。C語(yǔ)言作為一門經(jīng)典的編程語(yǔ)言,提供了多種循環(huán)控制結(jié)構(gòu)
    的頭像 發(fā)表于 12-07 01:11 ?154次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>循環(huán)</b>語(yǔ)句的應(yīng)用與優(yōu)化技巧