ARM优化之局部变量的位宽

来源:互联网 发布:电视如何进入网络电视 编辑:程序博客网 时间:2024/06/05 09:20

上篇说到了函数的形参数量,这次说下局部变量的位宽对于程序的影响。

 

大家都清楚,局部变量都是在栈中实现的,并且在函数调用结束时释放掉,所以有些人在定义局部变量的位宽时并没有仔细的考虑位宽的影响,随意定义。在一般的情况下,并不会造成很大的影响,但是在循环操作的情况下,就会影响程序的性能。

 

下面这段程序,用了BIT_U16定义了局部变量i,j。汇编内嵌在C中。

 

 

可能大家还没有看出来问题所在,再来一段用BIT_U32定义i,j的程序。

 

 

 

对比下,大家会发现,每次j的小循环就会多一条指令,每次i的大循环也会多一条指令,按照上面程序设定的320次大循环和240次小循环,可以得出这段程序会多消耗(240*320+320)=77120个指令,如果认为这些指令的执行时间都是单周期的,且预取译码都正常的情况下,会损耗77120个指令周期。即使时钟跑在了100MHz,也会损耗0.7712ms。

 

不要小看这0.7712ms,也许你的程序就因为这0.7712ms达不到实时要求,而要提高频率。而局部变量又不会长期占用RAM的空间。所以建议大家在涉及到这些程序的时候,适当采用机器的位宽,会使写出的程序更有效率。