日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 高效的C編程之: 函數(shù)調(diào)用

          高效的C編程之: 函數(shù)調(diào)用

          作者: 時(shí)間:2013-09-30 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://yuyingmama.com.cn/article/257016.htm

          14.9

          函數(shù)設(shè)計(jì)的基本原則是使其函數(shù)體盡量的小。這樣編譯器可以對函數(shù)做更多的優(yōu)化。

          14.9.1減少開銷

          上的開銷比非RISC體系結(jié)構(gòu)上的調(diào)用開銷小:

          ·調(diào)用返回指令“BL”或“MOVpc,lr”一般只需要6個(gè)指令周期(7上)。

          ·在函數(shù)的入口和出口使用多寄存器加載/存儲(chǔ)指令LDM和STM(Thumb指令使用PUSH和POP)提高函數(shù)體的執(zhí)行效率。

          體系結(jié)構(gòu)過程調(diào)用標(biāo)準(zhǔn)AAPCS定義了如何通過寄存器傳遞參數(shù)和返回值。函數(shù)中的前4個(gè)整型參數(shù)是通過ARM的前4個(gè)寄存器r0、r1、r2和r3來傳遞的。傳遞參數(shù)可以是與整型兼容的數(shù)據(jù)類型,如字符類型char、半字類型short等。

          注意

          如果是雙字類型,如longlong型,只能通過寄存器傳遞兩個(gè)參數(shù)。

          不能通過寄存器傳遞的參數(shù),通過函數(shù)堆棧來傳遞。這樣不論是函數(shù)的調(diào)用者還是被調(diào)用者都必須通過訪問堆棧來訪問參數(shù),使程序的執(zhí)行效率下降。

          下面的例子顯示了函數(shù)調(diào)用是傳遞4個(gè)參數(shù)和多于4個(gè)參數(shù)的區(qū)別。

          傳遞4個(gè)參數(shù)的函數(shù)調(diào)用源文件如下。

          intfunc1(inta,intb,intc,intd)

          {

          returna+b+c+d;

          }

          intcaller1(void)

          {

          returnfunc1(1,2,3,4);

          }

          編譯的結(jié)果如下。

          func1

          ADDr0,r0,r1

          ADDr0,r0,r2

          ADDr0,r0,r3

          MOVpc,lr

          caller1

          MOVr3,#4

          MOVr2,#3

          MOVr1,#2

          MOVr0,#1

          Bfunc1

          如果程序需要傳遞6個(gè)參數(shù),變?yōu)槿缦滦问健?/p>

          intfunc2(inta,intb,intc,intd,inte,intf)

          {

          returna+b+c+d+e+f;

          }

          intcaller2(void)

          {

          returnfunc1(1,2,3,4,5,6);

          }

          則編譯后的匯編文件如下。

          func2

          STRlr,[sp,#-4]!

          ADDr0,r0,r1

          ADDr0,r0,r2

          ADDr0,r0,r3

          LDMIBsp,{r12,r14}

          ADDr0,r0,r12

          ADDr0,r0,r14

          LDRpc,{sp},#4

          caller2

          STMFDsp!,{r2,r3,lr}

          MOVr3,#6

          MOVr2,#5

          STMIAsp,{r2,r3}

          MOVr3,#4

          MOVr2,#3

          MOVr1,#2

          MOVr0,#1

          BLfunc2

          LDMFDsp!,{r2,r3,pc}

          綜上所述,為了在程序中高效的調(diào)用函數(shù),最好遵循以下規(guī)則。

          ·盡量限制函數(shù)的參數(shù),不要超過4個(gè),這樣函數(shù)調(diào)用的效率會(huì)更高。

          ·當(dāng)傳遞的參數(shù)超過4個(gè)時(shí),要將多個(gè)相關(guān)參數(shù)組織在一個(gè)結(jié)構(gòu)體中,用傳遞結(jié)構(gòu)體指針來代替多個(gè)參數(shù)。

          ·避免將傳遞的參數(shù)定義為longlong型,因?yàn)閭鬟f一個(gè)longlong型的數(shù)據(jù)將會(huì)占用兩個(gè)32位寄存器。

          ·函數(shù)中存在浮點(diǎn)運(yùn)算時(shí),避免使用double型參數(shù)。


          上一頁 1 2 3 4 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉