全局变量绝不会位于寄存器中。使用指针或者函数调用,可以直接修改全局变量的值。
因此,编译器不能将全局变量的值缓存在寄存器中,但这在使用全局变量时便需要额外的
(常常是不必要的)读取和存储。所以,在重要的循环中我们不建议使用全局变量。
如果函数过多的使用全局变量,比较好的做法是拷贝全局变量的值到局部变量,
这样它才可以存放在寄存器。这种方法仅仅适用于全局变量不会被我们调用的任意函数使用。
例子如下:
int f(void);
int g(void);
int errs;
void test1(void)
{
errs += f();
errs += g();
}
void test2(void)
{
int localerrs = errs;
localerrs += f();
localerrs += g();
errs = localerrs;
}
注意,test1必须在每次增加操作时加载并存储全局变量errs的值,而test2存储localerrs于寄存器并且只需要一个计算机指令。
|
不建议使用太多全局变量