关于网友提出的“ 全局变量到底该用不该用”问题疑问,本网通过在网上对“ 全局变量到底该用不该用”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 全局变量到底该用不该用
描述: 书上都说全局变量降低效率,但我也不知道怎么降低效率了降低多少效率。
有时候两个函数位置相差太远,传递变量几乎不可能,是不是只能使用全局变量了?
解决方案1:
既然没谁愿意回答这个问题,我就扯一下
A a1;
A & a2()
{
static A s_a2;
return(s_a2);
}
// 考虑到多线程时,可能会这么写
A & a3()
{
static A * s_pa3 = nullptr;
if (nullptr == s_pa3)
{
lock();
if (nullptr == s_pa3)
{
s_pa3 = new A;
if (nullptr == s_pa3)
{
unlock();
throw "nullptr";
}
}
unlock();
}
return(*s_pa3);
}
不保证代码没问题
解决方案2: 单从运行速度上来说应该是全局变量快吧
只是全局变量容易引起命名冲突,当出错的时候,很难找到是在那个函数中更改了变量,所以不要过多的使用全局变量
解决方案3:
别走极端行吗?
事实是,不可多用,也不是不能用。
全局变量,会造成模块之间的耦合度太高,不利于模块化;
因为全局变量,你改我改大家都可以修改,程序逻辑不容易理顺,用得太多的话,调试改错,都不容易。
但是好处是,不再需要在函数里,传递参数了,简便快捷,
而且不会出现引用临时变量的错误-----把某个函数,内部的临时变量的引用。或者地址传递给函数外部使用的错误----由于局部变量,占用公用区域---栈区---相当于高速公路,会在函数反复调用时,被不确定那个函数,用作什么用途---栈区大概有以下用途
1)函数返回地址,2)中断返回地址,3)函数参数 4)自动变量--- 所以会出问题,全局变量整个程序只有一份,不和其他数据共享存储空间,不会有这个问题。
不过由于全局变量,程序运行期间,始终占有那块存储区,所以空间利用率比较低,大量的全局变量;
很快就会把内存用光,所以要少用全局变量。
局部自动变量和函数参数占用的空间,会反复利用,空间利用率比较高,所以鼓励使用参数传递,不鼓励使用全局变量。
另外,利用参数传递的程序,调试也比较方便,全局变量由于每个函数都可以使用,所以任何一个函数的修改,如果修改了全局变量,都有可能影响到其他函数,所以不利于调试,这是不鼓励使用全局变量的另一个原因。
基本上全局变量,的使用原则是:
1)能不用就不用;
2)该用还是要用;
3)尽量少用!
全局变量不需要,谈虎色变,也不能到处都用。
解决方案4: 全局变量效率低是相对于函数参数和局部变量来说的吧.
单从访问的汇编代码来说, 看不出效率有多大的区别.
但是, 执行到函数的时候, 函数的堆栈内存应该是在 CPU 的高速缓存中的, 而全局变量基本上是不在的. 访问全局变量的话, 可能导致 CPU 重新加载缓存, 效率自然低了.
不过, 只要不是效率至关重要的场合, 这点效率损失是无所谓的. 还是代码的结构和可读性更重要.
以上介绍了“ 全局变量到底该用不该用”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3694482.html