1、Short to int
描叙:在32位的程序中,使用int类型作循环体的索引变量比short类型具有更好的性能。循环体索引变量指for (i=0; i<9; i++)中的i。
背景:在32位的应用程序中使用short将导致机器码变长,同时处理器需要更长的时间处理;不仅如此,大多数编译器在未优化状况下对于short类型,总是将它转换成integer后再做各种操作,操作完后再转换为short类型,增加了一些不必要的操作。原始代码:unsigned shorti;
for (i=0; i
{
DoSomething();}
优化代码:
unsigned intj;
for (j=0; j
{
DoSomething();
}
2、Pointers to register
描叙:在循环体中尽量少使用指针间接寻址,可以采取一些迂回的方法,如果可能的话,先将间接寻址的内容放在某个寄存器里面,在循环体内操作完后,再回送到指针所指的内存。背景:间接寻址将导致至少两次以上的内存操作,这是其一。其二,由于间接寻址使得指令具有前后的依赖性(只有先获得地址才能够做取内存内容的操作),编译器的优化能力将被降低,同时对处理器中流水线的乱序,调度和指令配对也会有一定的影响。
原始代码:
inti, j = 0, *a = &j;
for (i=0; i
{
*a += i;<