【方輝專欄】ARM嵌入式編譯器(六) 內聯函數
2022-08-17
摘要: 本文主要對Arm Compiler 6編譯器中內聯函數進行介紹。關鍵字:Arm Compiler 6、編譯器、內聯函數如果Arm Compiler 6認為內聯此函數可以提高性能同時不會顯著增加代碼量,就會自動優化為內聯函數。當然您也可以使用編譯器選項來控制函數是否進行內聯。內聯選項或屬性說明__inline__提示編譯器可以進行內聯,但是否內聯仍取決于編譯器。__attribute__((always_inline))提示編譯器始終內聯此函數。__attribute__((noinline))提示編譯器不要內聯此函數。-fon-inline-functions這個編譯命令選項會禁止編譯器進行內聯,同時也使得__inline__失效。注1:自動內聯通常只有在優化等級為-O2或更高等級時才會進行,除非您使用了__attribute__((always_inline)),才會在低優化等級中進行。注2:Arm Compiler 6編譯器僅在同一個源文件內進行自動內聯函數。以下是一個__attribute__((always_inline))的例子:int bar(int a){????a=a*(a+1);????return a;} __attribute__((always_inline)) static int row(int a){????a=a*(a+1);????return a;} int foo (int i){????i=bar(i);????i=i-2;????i=bar(i);????i++;????i=row(i);????i++;????return i;}在以上代碼中,函數bar和row功能相同,只是row聲明始終內聯。使用-O2進行編譯,使用一個含有選項-fon-inline-functions,另一個不含有-fon-inline-functions選項進行編譯。編譯命令分別如下:有-fon-inline-functions選項:armclang --target=arm-arm-none-eabi -march=armv8-a file.c -O2 -S -o file.s -fon-inline-functions無-fon-inline-functions選項:armclang --target=arm-arm-none-eabi -march=armv8-a file.c -O2 -S -o file.s編譯后反匯編結果如下:使用-fon-inline-functions代碼不使用-fon-inline-functions代碼foo: @ @foo .fnstart@ BB#0: .save {r11, lr} push {r11, lr} bl bar sub r0, r0, #2 bl bar add r1, r0, #1 add r0, r0, #2 mul r0, r0, r1 add r0, r0, #1 pop {r11, pc}.Lfunc_end0: .size foo, .Lfunc_end0-foo .cantunwind .fnendfoo: @ @foo .fnstart@ BB#0: add r1, r0, #1 mul r0, r1, r0 sub r1, r0, #2 sub r0, r0, #1 mul r0, r0, r1 add r1, r0, #1 add r0, r0, #2 mul r0, r0, r1 add r0, r0, #1 bx lr.Lfunc_end0: .size foo, .Lfunc_end0-foo .cantunwind .fnend可以看到,使用-fon-inline-functions選項時,就不會對bar進行內聯,而不使用的時候就會對bar進行內聯,但對于row始終是進行內聯的。+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++關于億道電子億道電子技術有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內資深的研發工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業客戶提供研發、設計、管理過程中使用的各種軟件開發工具,致力于幫助客戶提高研發管理效率、縮短產品設計周期,提升產品可靠性。20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰略合作伙伴關系,并作為他們在中國區的主要分銷合作伙伴服務了數千家中國本土客戶,為客戶提供從芯片級開發工具、EDA 設計工具、軟件編譯以及測試工具、結構設計工具、仿真工具、電氣設計工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經驗積累,真正的幫助客戶實現了讓研發更簡單、更可靠、更高效的目標。歡迎關注“億道電子”公眾號了解更多研發工具軟件知識
查看更多→