全局变量绝不会位于寄存器中。使用指针或者函数调用,可以直接修改全局变量的值。
因此,编译器不能将全局变量的值缓存在寄存器中,但这在使用全局变量时便需要额外的
(常常是不必要的)读取和存储。所以,在重要的循环中我们不建议使用全局变量。
如果函数过多的使用全局变量,比较好的做法是拷贝全局变量的值到局部变量,
这样它才可以存放在寄存器。这种方法仅仅适用于全局变量不会被我们调用的任意函数使用。
例子如下:
- 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于寄存器并且只需要一个计算机指令。
|