91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C 語言編程技巧

發布時間:2020-06-29 22:00:07 來源:網絡 閱讀:440 作者:WZM3558862 欄目:編程語言

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

  第一招:以空間換時間

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

  方法A:通常的辦法

  • #define LEN 32

  • char string1 [LEN];

  • memset (string1,0,LEN);

  • strcpy (string1,"This is a example!!");



方法B:

  • const char string2[LEN] ="This is a example!";

  • char * cp;

  • cp = string2 ;



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

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

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

  方法C:

  • #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);


  •   方法D:

  • #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);



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

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

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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

简阳市| 叶城县| 定远县| 台东县| 常熟市| 建宁县| 嘉祥县| 三门峡市| 石阡县| 永顺县| 威海市| 汕尾市| 崇州市| 广东省| 如东县| 九龙城区| 太白县| 蕲春县| 岢岚县| 织金县| 新巴尔虎左旗| 水富县| 顺义区| 常德市| 龙胜| 临湘市| 邛崃市| 迁西县| 清水河县| 沂源县| 安泽县| 芜湖县| 瑞丽市| 元阳县| 六盘水市| 略阳县| 文昌市| 贺州市| 临沭县| 将乐县| 邢台县|