精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

C語言拆解循環 以空間換時間

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

拆解循環-以空間換時間

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

這里要注意,很多編譯器并不能自動分解循環。不好的代碼:

// 3D轉化:把矢量 V 和 4x4 矩陣 M 相乘
for (i = 0;i < 4;i ++)
{
r[i] = 0for (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

充分提取循環中的公共部分

對于一些不需要循環變量參加運算的任務可以把它們放到循環外面,這里的任務包括表達式、函數的調用、指針運算、數組訪問等,應該將沒有必要執行多次的操作全部集合在一起,放到一個init的初始化程序中進行。

03

延時函數中的循環技巧

通常使用的延時函數均采用自加的形式:

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

將其改為自減延時函數:

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

兩個函數的延時效果相似,但幾乎所有的C編譯對后一種函數生成的代碼均比前一種代碼少13個字節,因為幾乎所有的MCU均有為0轉移的指令,采用后一種方式能夠生成這類指令。在使用while循環時也一樣,使用自減指令控制循環會比使用自加指令控制循環生成的代碼更少13個字母。

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

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

    關注

    180

    文章

    7598

    瀏覽量

    136207
  • 程序
    +關注

    關注

    116

    文章

    3777

    瀏覽量

    80853
  • 編譯器
    +關注

    關注

    1

    文章

    1618

    瀏覽量

    49052
收藏 人收藏

    評論

    相關推薦

    C語言基礎知識(5)--循環語句

    C語言基礎知識(5)--循環語句
    的頭像 發表于 06-15 10:18 ?2104次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>基礎知識(5)--<b class='flag-5'>循環</b>語句

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

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

    C語言循環結構的使用方法

    詳細介紹了C語言while循環結構、do-while循環結構、for循環結構、循環退出語句的語法
    發表于 11-02 11:26 ?1614次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>循環</b>結構的使用方法

    C語言for循環的用法和注意事項

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

    C語言入門教程-if語句和while循環

    if語句和while循環 C語言中,if語句和while循環都會用到布爾表達式。下面是一個使用if語句的簡單例子: #include
    發表于 07-29 10:48 ?8527次閱讀

    C++語言基礎講解視頻do while循環語句

    C++語言基礎講解視頻do while循環語句
    發表于 01-14 15:32 ?5次下載

    C++語言基礎講解視頻while循環語句

    C++語言基礎講解視頻while循環語句,喜歡的朋友可以下載來學習。
    發表于 01-14 15:31 ?3次下載

    C語言教程之循環顯示隨機數問題

    C語言教程之循環顯示隨機數問題,很好的C語言資料,快來學習吧。
    發表于 04-25 15:03 ?0次下載

    C語言教程之當前時間轉換

    C語言教程之當前時間轉換,很好的C語言資料,快來學習吧。
    發表于 04-25 16:09 ?0次下載

    多變循環彩燈C語言+Proteus軟件仿真參考程序

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

    C語言教程之使用循環結構設計C語言程序的資料說明

    本文檔詳細介紹的是C語言教程之使用循環結構設計C語言程序的資料說明主要內容包括了:1.while循環
    發表于 02-15 11:27 ?3次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>教程之使用<b class='flag-5'>循環</b>結構設計<b class='flag-5'>C</b><b class='flag-5'>語言</b>程序的資料說明

    C語言的3種循環結構分析

    C語言循環結構有for循環、while循環、do循環和goto
    的頭像 發表于 05-20 13:43 ?1.1w次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的3種<b class='flag-5'>循環</b>結構分析

    C語言中的數組空間動態開辟

    C語言中的數組空間動態開辟 在C語言中,必不可少的需要使用到數組,通常為了動態的開辟數組空間,可
    的頭像 發表于 02-10 12:42 ?2076次閱讀

    C語言循環與分支-2

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

    c語言在while中嵌套if循環

    C語言是一種廣泛使用的面向過程編程語言,它提供了許多控制結構來幫助程序員實現復雜的邏輯和流程控制。其中,while循環和if語句是非常常見和重要的控制結構。本文將詳細介紹
    的頭像 發表于 11-22 10:09 ?5792次閱讀