|
這是我今天下午看那本<<ARM嵌入式系統(tǒng)開發(fā)——軟件設(shè)計(jì)與優(yōu)化>>所學(xué)到的東西
。前面的關(guān)于ARM核的指令我就不講了,只說下今天看的關(guān)于怎么提高C編程的效
率,我還只看了那基本數(shù)據(jù)類型的定義時(shí)所應(yīng)該要注意的事項(xiàng),前面我在一篇
<<ARM內(nèi)部邏輯結(jié)構(gòu)見解【原】>>已提到過內(nèi)存的數(shù)據(jù)進(jìn)入ARM核時(shí)要經(jīng)過一個(gè)符
號(hào)擴(kuò)展,也就是說一個(gè)不足32位的數(shù)據(jù)經(jīng)過內(nèi)核會(huì)被擴(kuò)展成32位的,那么我們?cè)?br />
編程時(shí)就要注意咯,具體有以下幾個(gè)方面:
1)我們?nèi)绻诔绦蛑卸x了一個(gè)字符性的變量,那么編譯器會(huì)對(duì)這個(gè)變量進(jìn)行一
個(gè)判別,就是這個(gè)字符變量值超過了255沒,這樣勢(shì)必會(huì)增加一條指令,而我們?nèi)?br />
果用unsigned int,則可以省去那條多余的指令,
2)如果程序中有關(guān)于數(shù)組的操作時(shí),我們盡量要用指針來操作,為什么呢,因?yàn)?br />
編譯器對(duì)數(shù)組它分兩條指令來實(shí)現(xiàn)數(shù)組的地址偏移,而用指針,它其實(shí)就是一個(gè)
地址,偏移當(dāng)然一條指令就夠拉。
3)如果我們程序中有不同數(shù)據(jù)類型的數(shù)據(jù)直接運(yùn)算時(shí),這時(shí)我們要避免這種現(xiàn)象
的發(fā)生,因?yàn)樗鼤?huì)另外生成一條語句來實(shí)現(xiàn)數(shù)據(jù)位數(shù)的擴(kuò)展,所以我們可以在他
們計(jì)算完后,再統(tǒng)一用一條符號(hào)強(qiáng)制命令進(jìn)行轉(zhuǎn)換。
4)在進(jìn)行乘除法運(yùn)算時(shí),如果變量能夠用無符號(hào)型的,就不要用有符號(hào)的,因?yàn)?br />
無符號(hào)的運(yùn)算在進(jìn)行除法和乗法運(yùn)算時(shí)編譯器會(huì)盡量通過右移來實(shí)現(xiàn),這樣處理
速度快,
|
|