在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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)用 > ARM優(yōu)化之函數(shù)的形參數(shù)量

            ARM優(yōu)化之函數(shù)的形參數(shù)量

            作者: 時間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
            ARM 的參數(shù)傳遞遵循 ATPCS 的規(guī)范,子程序間通過寄存器 R0-R3 來傳遞參數(shù),返回值也通過 R0 來返回。這就造成一個問題,當構(gòu)造超過 4 個參數(shù)的函數(shù)時,如何實現(xiàn)。

            翻閱了其他資料以及下面的代碼比對表明,多出來的參數(shù)傳遞的時候,需要使用棧,而棧需要使用額外的指令以及對慢速存儲單元的讀寫,所以不超過 4 個參數(shù)的函數(shù)是很有利于程序的優(yōu)化。

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



            測試代碼如下:



            第一段為采用4個參數(shù)的函數(shù):

            view plain copy to clipboard print ?
            01.int Test( void )
            02.{
            03. return SubCode (1,2,3,4);
            04.}
            05.
            06.int SubCode( int a, int b, int c, int d)
            07.{
            08. return a+b+c+d;
            09.}


            view plaincopy to clipboardprint?
            00.int Test(void)
            00.{
            00. return SubCode (1,2,3,4);
            00.}
            00.
            00.int SubCode(int a, int b, int c, int d)
            00.{
            00. return a+b+c+d;
            00.}



            這段會編譯成


            view plain copy to clipboard print ?
            01.Test
            02.MOV r3,#4
            03.MOV r2,#3
            04.MOV r1,#2
            05.MOV r0,#1
            06.B SubCode
            07.
            08.SubCode
            09.ADD r0,r0,r1
            10.ADD r0,r0,r2
            11.ADD r0,r0,r3
            12.MOV pc,lr


            view plaincopy to clipboardprint?
            00.Test
            00.MOV r3,#4
            00.MOV r2,#3
            00.MOV r1,#2
            00.MOV r0,#1
            00.B SubCode
            00.
            00.SubCode
            00.ADD r0,r0,r1
            00.ADD r0,r0,r2
            00.ADD r0,r0,r3
            00.MOV pc,lr





            第二段為采用6個參數(shù)的函數(shù):

            view plain copy to clipboard print ?
            01.int Test( void )
            02.{
            03. return SubCode (1,2,3,4,5,6);
            04.}
            05.
            06.int SubCode( int a, int b, int c, int d, int e, int f)
            07.{
            08. return a+b+c+d+e+f;
            09.}

            view plaincopy to clipboardprint?
            00.int Test(void)
            00.{
            00. return SubCode (1,2,3,4,5,6);
            00.}
            00.
            00.int SubCode(int a, int b, int c, int d, int e, int f)
            00.{
            00. return a+b+c+d+e+f;
            00.}




            而這段又會編譯成:

            view plain copy to clipboard print ?
            01.Test
            02.STMFD sp!,{r2,r3,lr}
            03.MOV r3,#6
            04.MOV r2,#5
            05.STMIA sp,{r2,r3}
            06.MOV r3,#4
            07.MOV r2,#3
            08.MOV r1,#2
            09.MOV r0,#1
            10.BL SubCode
            11.LDMFD sp!,{r2,r3,pc}
            12.
            13.SubCode
            14.STR lr, [sp,#-4]!
            15.ADD r0,r0,r1
            16.ADD r0,r0,r2
            17.ADD r0,r0,r3
            18.LDMIB sp,{r12,r14}
            19.ADD r0,r0,r12
            20.ADD r0,r0,r14
            21.LDR pc,{sp},#4

            view plaincopy to clipboardprint?
            00.Test
            00.STMFD sp!,{r2,r3,lr}
            00.MOV r3,#6
            00.MOV r2,#5
            00.STMIA sp,{r2,r3}
            00.MOV r3,#4
            00.MOV r2,#3
            00.MOV r1,#2
            00.MOV r0,#1
            00.BL SubCode
            00.LDMFD sp!,{r2,r3,pc}
            00.
            00.SubCode
            00.STR lr, [sp,#-4]!
            00.ADD r0,r0,r1
            00.ADD r0,r0,r2
            00.ADD r0,r0,r3
            00.LDMIB sp,{r12,r14}
            00.ADD r0,r0,r12
            00.ADD r0,r0,r14
            00.LDR pc,{sp},#4




            就上面看來,增加了兩個參數(shù),就會增加很多代碼用來完成這次調(diào)用。但是我們也無法保證函數(shù)的參數(shù)一定是小于4個的,所以這里筆者建議,如果函數(shù)的參數(shù)必須要4個以上的時候,可以采用結(jié)構(gòu)體的方式來減少參數(shù)的個數(shù)。



            這樣的優(yōu)化,對于一些經(jīng)常需要調(diào)用的函數(shù),或者需要快速響應(yīng)的情況下,還是非常必要的。



            評論


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

            關(guān)閉