芯源半导体CW32
直播中

李涛

8年用户 1462经验值
私信 关注
[经验]

C语言全局变量重点使用

全局变量绝不会位于寄存器中。使用指针或者函数调用,可以直接修改全局变量的值。
因此,编译器不能将全局变量的值缓存在寄存器中,但这在使用全局变量时便需要额外的
(常常是不必要的)读取和存储。所以,在重要的循环中我们不建议使用全局变量。

如果函数过多的使用全局变量,比较好的做法是拷贝全局变量的值到局部变量,
这样它才可以存放在寄存器。这种方法仅仅适用于全局变量不会被我们调用的任意函数使用。
例子如下:



  • 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于寄存器并且只需要一个计算机指令。


更多回帖

发帖
×
20
完善资料,
赚取积分