人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

C語言高效編程的4大絕招

C語言高效編程的4大絕招

更新時間:2022-07-16 文章作者:未知 信息來源:網絡 閱讀次數:

編寫高效簡潔的C語言代碼,是許多軟件工程師追求的目標。本文就是針對編程工作中的一些體會和經驗做相關的闡述。

  第一招:以空間換時間

  計算機程序中最大的矛盾是空間和時間的矛盾,那么,從這個角度出發逆向思維來考慮程序的效率問題,我們就有了解決問題的第1招--以空間換時間。比如說字符串的賦值:

  方法A:通常的辦法


  _NOBR> _CODE>#define LEN 32
  char string1 [LEN];
  memset (string1,0,LEN);
  strcpy (string1,"This is a example!!");_CODE>
  
  _NOBR>


  方法B:


  _NOBR> _CODE>const char string2[LEN] ="This is a example!";
  char * cp;
  cp = string2 ;_CODE>
  
  _NOBR>


  使用的時候可以直接用指針來操作。

  從上面的例子可以看出,A和B的效率是不能比的。在同樣的存儲空間下,B直接使用指針就可以操作了,而A需要調用兩個字符函數才能完成。B的缺點在于靈活性沒有A好。在需要頻繁更改一個字符串內容的時候,A具有更好的靈活性;如果采用方法B,則需要預存許多字符串,雖然占用了大量的內存,但是獲得了程序執行的高效率。

  如果系統的實時性要求很高,內存還有一些,那我推薦你使用該招數。該招數的變招--使用宏函數而不是函數。舉例如下:

  方法C:


  _NOBR> _CODE>#define bwMCDR2_ADDRESS 4
  #define bsMCDR2_ADDRESS 17
  int BIT_MASK(int __bf)
  {
  return ((1U << (bw ## __bf)) - 1)
  << (bs ## __bf);
  }
  void SET_BITS(int __dst,
  int __bf, int __val)
  {
  __dst = ((__dst) & ~(BIT_MASK(__bf))) |
  \
  (((__val) << (bs ## __bf))
  & (BIT_MASK(__bf))))
  }

  SET_BITS(MCDR2, MCDR2_ADDRESS,
  RegisterNumber);_CODE>
  
  _NOBR>

  方法D:


  _NOBR> _CODE>#define bwMCDR2_ADDRESS 4
  #define bsMCDR2_ADDRESS 17
  #define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)
  #define BIT_MASK(__bf)
  (((1U << (bw ## __bf)) - 1)
  << (bs ## __bf))
  #define SET_BITS(__dst, __bf, __val)
  \
  ((__dst) = ((__dst) & ~(BIT_MASK(__bf)))
  | \
  (((__val) << (bs ## __bf))
  & (BIT_MASK(__bf))))

  SET_BITS(MCDR2, MCDR2_ADDRESS,
  RegisterNumber);_CODE>
  
  _NOBR>


  函數和宏函數的區別就在于,宏函數占用了大量的空間,而函數占用了時間。大家要知道的是,函數調用是要使用系統的棧來保存數據的,如果編譯器里有棧檢查選項,一般在函數的頭會嵌入一些匯編語句對當前棧進行檢查;同時,CPU也要在函數調用時保存和恢復當前的現場,進行壓棧和彈棧操作,所以,函數調用需要一些CPU時間。

  而宏函數不存在這個問題。宏函數僅僅作為預先寫好的代碼嵌入到當前程序,不會產生函數調用,所以僅僅是占用了空間,在頻繁調用同一個宏函數的時候,該現象尤其突出。

  D方法是我看到的最好的置位操作函數,是ARM公司源碼的一部分,在短短的三行內實現了很多功能,幾乎涵蓋了所有的位操作功能。C方法是其變體,其中滋味還需大家仔細體會。

  
  第二招:數學方法解決問題

  現在我們演繹高效C語言編寫的第二招--采用數學方法來解決問題。數學是計算機之母,沒有數學的依據和基礎,就沒有計算機的發展,所以在編寫程序的時候,采用一些數學方法會對程序的執行效率有數量級的提高。舉例如下,求 1~100的和。

  方法E:


  _NOBR> _CODE>int I , j;
  for (I = 1 ;I<=100; I ++)
  {
  j += I;
  }_CODE>
  
  _NOBR>


  方法F


  _NOBR> _CODE>int I;
  I = (100 * (1+100)) / 2_CODE>
  
  _NOBR>


  這個例子是我印象最深的一個數學用例,是我的計算機啟蒙老師考我的。當時我只有小學三年級,可惜我當時不知道用公式 N×(N+1)/ 2 來解決這個問題。方法E循環了100次才解決問題,也就是說最少用了100個賦值,100個判斷,200個加法(I和j);而方法F僅僅用了1個加法,1次乘法,1次除法。效果自然不言而喻。所以,現在我在編程序的時候,更多的是動腦筋找規律,最大限度地發揮數學的威力來提高程序運行的效率。

[1] [2]  下一頁

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 柞水县| 长治市| 什邡市| 上饶县| 六枝特区| 大宁县| 沁阳市| 巫山县| 桃园县| 台东市| 大关县| 吴旗县| 九寨沟县| 秦安县| 新田县| 兴城市| 稷山县| 安顺市| 循化| 外汇| 富源县| 合作市| 泗洪县| 张掖市| 无极县| 遂平县| 玛纳斯县| 民权县| 玛多县| 达日县| 阜新| 南通市| 原阳县| 子洲县| 当雄县| 普格县| 余干县| 清原| 黄平县| 德安县| 东海县|