<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 學(xué)習(xí)方法與實(shí)踐 > ARM程序設(shè)計(jì)優(yōu)化策略與技術(shù)

          ARM程序設(shè)計(jì)優(yōu)化策略與技術(shù)

          ——
          作者: 時(shí)間:2007-12-10 來源:單片機(jī)與嵌入式系統(tǒng)應(yīng)用 收藏

                  是指軟件編程結(jié)束后,利用軟件開發(fā)工具對(duì)進(jìn)行調(diào)整和改進(jìn),讓充分利用資源, 提高運(yùn)行效率, 縮減代碼尺寸的過程。按照的側(cè)重點(diǎn)不同, 程序可分為運(yùn)行速度優(yōu)化和代碼尺寸優(yōu)化。

                  運(yùn)行速度優(yōu)化是指在充分掌握軟硬件特性的基礎(chǔ)上, 通過應(yīng)用程序結(jié)構(gòu)調(diào)整等手段來降低完成指定任務(wù)所需執(zhí)行的指令數(shù)。在同一個(gè)處理器上, 經(jīng)過速度優(yōu)化的程序比未經(jīng)優(yōu)化的程序在完成指定任務(wù)時(shí)所需的時(shí)間更短,即前者比后者具有更高的運(yùn)行效率。代碼尺寸優(yōu)化是指,采取措施使應(yīng)用程序在能夠正確完成所需功能的前提下, 盡可能減少程序的代碼量。

                   然而在實(shí)際的程序過程中,程序優(yōu)化的兩個(gè)目標(biāo)(運(yùn)行速度和代碼大?。?nbsp;通常是互相矛盾的。為了提高程序運(yùn)行效率,往往要以犧牲存儲(chǔ)空間、增加代碼量為代價(jià), 例如程序中經(jīng)常使用的以查表代替計(jì)算、循環(huán)展開等方法就容易導(dǎo)致程序代碼量增加。而為了減少程序代碼量、壓縮存儲(chǔ)器空間,可能又要以降低程序運(yùn)行效率為代價(jià)。因此, 在對(duì)程序?qū)嵤﹥?yōu)化之前, 應(yīng)先根據(jù)實(shí)際需求確定相應(yīng)的策略。在處理器資源緊張的情況下, 應(yīng)著重考慮運(yùn)行速度優(yōu)化;而在存儲(chǔ)器資源使用受限的情況下, 則應(yīng)優(yōu)先考慮代碼尺寸的優(yōu)化。

                   1 程序運(yùn)行速度優(yōu)化


                 程序運(yùn)行速度優(yōu)化的方法可分為以下幾大類。
                 1.1 通用的優(yōu)化方法
                 (1)減小運(yùn)算強(qiáng)度

                  利用左/ 右移位操作代替乘/ 除2 運(yùn)算:通常需要乘以或除以2 的冪次方都可以通過左移或右移n 位來完成。實(shí)際上乘以任何一個(gè)整數(shù)都可以用移位和加法來代替乘法。 7 中加法和移位可以通過一條指令來完成,且執(zhí)行時(shí)間少于乘法指令。例如: i = i 

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();