2.4.2.全局变量分组

将全局变量分组到结构中有可能使编译器能够使用 DP 生成有效的直接寻址,并尽可能减少变量访问之间对 DP 的更新次数。

表 2.3 说明了如何将全局变量分组到结构的字段中。

表 2.3 分组变量- 分组和效率
全局变量 将全局变量分组到结构中
int16_tglobal0;int16_tglobal1;int16_tglobal2;int16_tglobal3;int16_tglobal4;int16_tglobal5[32];int16_tfoo(){returnglobal0+global1+global2+global3+global4+global5[0];}
typedefstruct{int16_tglobal0;int16_tglobal1;int16_tglobal2;int16_tglobal3;int16_tglobal4;int16_tglobal5[32];}Globals;Globalsg;int16_tbar(){returng.global0+g.global1+g.global2+g.global3+g.global4+g.global5[0];}

表 2.4 说明了通过对全局变量进行分组来改进生成的汇编代码 - 各次访问之间对 DP 的更新较少 - 对于 5 次访问,从 3 次减少到 1 次。

表 2.4 将全局变量分组到结构中提高了效率
||foo||: MOVW DP,#||global0|| MOV AL,@||global0|| MOVW DP,#||global5|| ADD AL,@||global5|| MOVW DP,#||global1|| ADD AL,@||global1|| ADD AL,@||global2|| ADD AL,@||global3|| ADD AL,@||global4|| LRETR
||bar||: MOVW DP,#||g||+1 MOV AL,@||g||+1 ADD AL,@||g|| ADD AL,@||g||+2 ADD AL,@||g||+3 ADD AL,@||g||+4 ADD AL,@||g||+5 LRETR

如需了解详情,请参阅 TMS320C28x 优化 C/C++ 编译器用户指南中的第 3.11 节“数据页 (DP) 指针加载优化”。