应该尽量限制函数内部循环所用局部变量的数目,最多不超过12个,这样,编译器就可以把这些变量都分配给ARM寄存器;编译器会试图对C函数中的每一个局部变量分配一个寄存器。如果几个局部变量不会交迭使用,那么编译器会对它们分配同一个寄存器。当局部变量多于可用的寄存器时,编译器会把多余的变量存储到堆栈。由于这些变量被写入了存储器,所以被称为溢出或者替换(swapped out)变量,就像虚拟存储器的内容被替换到硬盘一样。与分配在寄存器中的变量相比,对溢出变量的访问要慢得多。
解决多变量问题:将多个相关的参数组织到一个结构体中,传递一个结构体指针来代替多个参数。
typedef struct{
char *Q_start,
char *Q_end,
char *Q_ptr,
}Queue;
void queue_bytes(Queue *queue, Char *data,unsigned int N)
{
Char * Q_ptr = queue->Q_ptr;
Char * Q_end= queue->Q_end;
do
{
*(Q_ptr ++) = * (data ++);
if (Q_ptr == Q_end)
{
Q_ptr = queue -> Q_start;
}
}while( -- N);
queue -> Q_ptr = Q_ptr;
}
为了提高效率,应当限制函数内部循环使用的局部变量数量,建议不超过12个,以便编译器能将这些变量分配到ARM寄存器中。当变量超过寄存器数量时,编译器会将多余的变量存储到堆栈,导致访问速度变慢。解决方法是通过使用结构体来组合多个相关参数,减少单独变量的使用。
3879

被折叠的 条评论
为什么被折叠?



