高效的C编程之:C编译器及其优化(下)
时间:12-16 16:44 阅读:1552次
*温馨提示:点击图片可以放大观看高清大图
简介:本章将帮助读者在ARM处理器上编写高效的C代码。本章涉及的一些技术不仅适用于ARM处理器,也适用于其他RISC处理器。本章首先从ARM编译器及其优化入手,讲解C编译器在优化代码时所碰到的一些问题。(EEFOCUS)
下面的例子显示了同一段程序,使用内嵌功能和不使用内嵌功能编译出的不同结果。
要编译的源文件如下。
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
从上面的例子可以看出在使用内嵌功能时,函数间的相互调用减少了数据的压栈和出栈,节省了程序的执行时间,但如果内嵌函数被调用多次会造成空间的浪费。