在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

            本文引用地址:http://www.biyoush.com/article/257016.htm

            14.9

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

            14.9.1減少開銷

            上的開銷比非RISC體系結(jié)構(gòu)上的調(diào)用開銷?。?/p>

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

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

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

            注意

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

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

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

            傳遞4個參數(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個參數(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個,這樣函數(shù)調(diào)用的效率會更高。

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

            ·避免將傳遞的參數(shù)定義為longlong型,因為傳遞一個longlong型的數(shù)據(jù)將會占用兩個32位寄存器。

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


            上一頁 1 2 3 4 下一頁

            評論


            相關(guān)推薦

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

            關(guān)閉