色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

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

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

          14.9.2使用返回結(jié)構(gòu)體

          編譯選項指示編譯器在整數(shù)寄存器中返回4個整數(shù)字的結(jié)構(gòu)或者在浮點寄存器中返回4個浮點型或雙精度型值,而不使用存儲器。

          下面的例子顯示了選項的用法。

          typedefstruct{inthi;uintlo;}int64;//注意該結(jié)構(gòu)中,高位為有符號整數(shù),低位為無符號整數(shù)

          __value_in_regsint64add64(int64x,int64y)

          {int64res;

          res.lo=x.lo+y.lo;

          res.hi=x.hi+y.hi;

          if(res.loy.lo)res.hi++;//carryfromlowword

          returnres;

          }

          voidtest(void)

          {int64a,b,c,sum;

          a.hi=0x00000000;a.lo=0xF0000000;

          b.hi=0x00000001;b.lo=0x10000001;

          sum=add64(a,b);

          c.hi=0x00000002;c.lo=0xFFFFFFFF;

          sum=add64(sum,c);

          }

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

          add64

          ADDSa2,a2,a4

          ADCa1,a3,a1

          MOVpc,lr

          test

          STMDBsp!,{lr}

          MOVa1,#0

          MOVa2,#f0000000

          MOVa3,#1

          MOVa4,#10000001

          BLadd64

          MOVa3,#2

          MVNa4,#0

          LDMIAsp!,{lr}

          Badd64

          當(dāng)使用__value_in_regs定義結(jié)構(gòu)體時,編譯的代碼大小為52字節(jié),如果不使用__value_in_regs選項,則編譯出的結(jié)果為160字節(jié)(本書中沒有列出未使用__value_in_regs時的編譯結(jié)果,讀者有興趣可以自己上機試驗)。

          14.9.3葉子函數(shù)

          所謂葉子函數(shù)(leaffunction)就是在其函數(shù)體內(nèi)不存在對其他,它也常被稱為終級函數(shù)。因為葉子函數(shù)不需要調(diào)用其他函數(shù),所有沒有保存/恢復(fù)寄存器的操作,因此執(zhí)行效率比一般函數(shù)要高。

          當(dāng)函數(shù)中必須對一些寄存器進(jìn)行保存時,可以使用高效率的多寄存器存儲指令STM,對需要保存的寄存器內(nèi)存一次性存儲。

          正是由于葉子函數(shù)執(zhí)行的高效性,所以在編程時,盡量將子程序編寫為葉子函數(shù),這樣即使程序中多次調(diào)用也不會影響代碼性能。

          為了高效的調(diào)用函數(shù),可以遵循下面原則。

          ·避免在被頻繁調(diào)用的函數(shù)中調(diào)用其他函數(shù),以保證被頻繁調(diào)用的函數(shù)被編譯器編譯為葉子函數(shù)。

          ·把比較小的被調(diào)用函數(shù)和調(diào)用函數(shù)放在同一個源文件中,并且要先定義后調(diào)用,編譯器就可以優(yōu)化或內(nèi)聯(lián)較小的函數(shù)。

          ·對性能影響較大的重要函數(shù)可使用關(guān)鍵字_inline進(jìn)行內(nèi)聯(lián)。



          評論


          相關(guān)推薦

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

          關(guān)閉