下面的例子显示了同一段程序,使用内嵌功能和不使用内嵌功能编译出的不同结果。
要编译的源文件如下。
intbar(inta)
{
a=a+5;
returna;
}
intfoo(inti)
{
i=bar(i);
i=i-2;
i=bar(i);
i++;
returni;
}
下面的汇编程序为不使用内嵌功能时编译出的结果。
bar
ADDr0,r0,#5
MOVpc,lr
foo
STRlr,[sp,#-4]!
BLbar
SUBr0,r0,#2
BLbar
ADDr0,r0,#1
LDRpc,[sp],#4
下面的汇编码是使用内嵌功能时编译出的结果。
foo
ADDr0,r0,#5
SUBr0,r0,#2
ADDr0,r0,#5
ADDr0,r0,#1
MOVpc,lr
从上面的例子可以看出在使用内嵌功能时,函数间的相互调用减少了数据的压栈和出栈,节省了程序的执行时间,但如果内嵌函数被调用多次会造成空间的浪费。