人妻蜜と1~4中文字幕月野定规 ,国产精品成人va在线播放,色优久久久久综合网鬼色,WWW插插插无码视频网站

【方輝專欄】ARM嵌入式編譯器(六) 內(nèi)聯(lián)函數(shù)
發(fā)布時間:2022-08-17

摘要: 本文主要對Arm Compiler 6編譯器中內(nèi)聯(lián)函數(shù)進(jìn)行介紹。

關(guān)鍵字:Arm Compiler 6、編譯器、內(nèi)聯(lián)函數(shù)


如果Arm Compiler 6認(rèn)為內(nèi)聯(lián)此函數(shù)可以提高性能同時不會顯著增加代碼量,就會自動優(yōu)化為內(nèi)聯(lián)函數(shù)。當(dāng)然您也可以使用編譯器選項(xiàng)來控制函數(shù)是否進(jìn)行內(nèi)聯(lián)。

內(nèi)聯(lián)選項(xiàng)或?qū)傩?/strong>說明
__inline__提示編譯器可以進(jìn)行內(nèi)聯(lián),但是否內(nèi)聯(lián)仍取決于編譯器。
__attribute__((always_inline))提示編譯器始終內(nèi)聯(lián)此函數(shù)。
__attribute__((noinline))提示編譯器不要內(nèi)聯(lián)此函數(shù)。
-fon-inline-functions這個編譯命令選項(xiàng)會禁止編譯器進(jìn)行內(nèi)聯(lián),同時也使得__inline__失效。

注1:自動內(nèi)聯(lián)通常只有在優(yōu)化等級為-O2或更高等級時才會進(jìn)行,除非您使用了__attribute__((always_inline)),才會在低優(yōu)化等級中進(jìn)行。

注2:Arm Compiler 6編譯器僅在同一個源文件內(nèi)進(jìn)行自動內(nèi)聯(lián)函數(shù)。


以下是一個__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;

}


在以上代碼中,函數(shù)bar和row功能相同,只是row聲明始終內(nèi)聯(lián)。

使用-O2進(jìn)行編譯,使用一個含有選項(xiàng)-fon-inline-functions,另一個不含有-fon-inline-functions選項(xiàng)進(jìn)行編譯。


編譯命令分別如下:

有-fon-inline-functions選項(xiàng):

armclang --target=arm-arm-none-eabi -march=armv8-a file.c -O2 -S -o file.s -fon-inline-functions


無-fon-inline-functions選項(xiàng):

armclang --target=arm-arm-none-eabi -march=armv8-a file.c -O2 -S -o file.s

編譯后反匯編結(jié)果如下:

使用-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
.fnend
foo: @ @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選項(xiàng)時,就不會對bar進(jìn)行內(nèi)聯(lián),而不使用的時候就會對bar進(jìn)行內(nèi)聯(lián),但對于row始終是進(jìn)行內(nèi)聯(lián)的。


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


關(guān)于億道電子

億道電子技術(shù)有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內(nèi)資深的研發(fā)工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業(yè)客戶提供研發(fā)、設(shè)計、管理過程中使用的各種軟件開發(fā)工具,致力于幫助客戶提高研發(fā)管理效率、縮短產(chǎn)品設(shè)計周期,提升產(chǎn)品可靠性。

20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰(zhàn)略合作伙伴關(guān)系,并作為他們在中國區(qū)的主要分銷合作伙伴服務(wù)了數(shù)千家中國本土客戶,為客戶提供從芯片級開發(fā)工具、EDA 設(shè)計工具、軟件編譯以及測試工具、結(jié)構(gòu)設(shè)計工具、仿真工具、電氣設(shè)計工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經(jīng)驗(yàn)積累,真正的幫助客戶實(shí)現(xiàn)了讓研發(fā)更簡單、更可靠、更高效的目標(biāo)。

歡迎關(guān)注“億道電子”公眾號

了解更多研發(fā)工具軟件知識