3
上一节讨论了对于局部变量和函数参数,使用int型比使用char或short型要好
adda1,a1,#1
shortinc
编译出的结果如下
上一页
{
long
再把上面的程序段中变量a声明位int型,代码如下本节将对程序中的有符号整数(signedint)和无符号整数(unsignedint)的执行效率进行分析比较
有符号32位字数据
returna+1;
1
编译后的结果如下
一些情况下不得不使用char或short类型,例如要使用char或short类型的数据溢出指令时归零特性时,如模运算255+1=0,就要使用char类型
c数据类型
charinc
}
movpc,lr
}
shortshortinc(shorta)
无符号8位字节数据
表14.2 c编译器数据类型c++学习资料映射
movpc,lr
armc编译器支持基本的数据类型:char、short、int、longlong、float和double表14.2说明了armcc对c语言所使用的数据类型的映射
char
movpc,lr
charcharinc(chara)
intwordinc(inta)
下一页
通常情况下,如果程序中只有加法、减法和乘法,那么有符号和无符号数的执行效率相差不大但是,如果有了除法,情况就不一样了详细内容可参加除法运算优化一节
anda1,a1,#ff
表示的意义
longlong
{
int
returna+1;
adda1,a1,#1
adda1,a1,#1
分析发现,该结果比使用int型的变量多增加了两条指令(lsl和asr)编译器先将变量左移16位,然c++就业前景后右移16位,以实现一个16位符号扩展右移是符号位扩展移位,它复制了符号位来填充高16位
14.8.2有符号数和无符号数
2
wordinc
首先来看上一节的例子,如果将变量指定为有符号的半字类型(编译器默认short型为有符号类型),程序的源代码如下
注意
分析上面的两段代码不难发现,当把变量声明为char型时,编译器增加了额外的add指令来保证其范围在0~255之间
为了说明局部变量类型的影响,先来看一个简单的例子
short
有符号32位字数据
有符号16位半字数据
比较一下编译器输出结果
{
arm指令集中,无论是数据处理指令还是数据加载/存储指令,处理的数据类型不同,指令的执行效率是不一样的本章将详细讨论,如何在程序中为变量分配合理的数据类型,来提高学c++好不好找工作代码的执行效率
mova1,a1,lsl#16
14.8.1局部变量
http://14.8变量类型
有符号64位双字数据
returna+1;
}
mova1,a1,asr#16
arm属于risc的体系结构,所有大多数的数据处理都是在32位的寄存器中进行的基于这个原因,局部变量应尽可能使用32位数据类型int或long
白癜风北京杭州治疗白癜风效果最好的医院