全局变量为什么不建议用
7922023-08-21
大家好,关于C++ 为什么不鼓励使用全局变量很多朋友都还不太明白,今天小编就来为大家分享关于测试用例不建议全局变量的知识,希望对各位有所帮助!
本文目录
当然有道理,因为全局也不是万能的。全局变量优点:
1.全局可视,任何一个函数都可以访问和更改变量值。
2.内存地址固定,读写效率高缺点:1.容易造成命名冲突2.当值不正确或者出错时,很难确定是哪个函数更改过这个变量3.不支持多线程
优点:
1)全局可见,任何一个函数或线程都可以读写全局变量-同步操作简单。
2)内存地址固定,读写效率比较高。
缺点:
1)全局变量存放在静态存储区,系统需要为其分配内存,一直到程序结束,才会释放内存,这一点就局部变量的动态分配,随用随从栈中申请,用完(函数调用完毕)就释放。
2)影响函数的封装性能:我们肯定是希望我们写的函数具有重入性,就如一个黑盒子一般,只通过函数参数就能得到返回,内部实现要独立,但是如果函数中使用了全局变量,这势必就破坏了函数的封装性,会造成对全局变量的依赖。
3)降低函数的移值性,原因同上。
4)降低代码的可读性,这也意味着系统维护会不方便,因为一个全局变量可能会出现程序中的各个环节,函数的执行也会根据环境变化而变化,所以调试会不太方便。
5)全局变量的读写,可能会延迟,这主要是体现在“写”操作上,由于写操作,一般需要2个周期操作,所以有可能会出现,这边没写完时,那边已经读了,结果读到的不是最终值,这个是一个概率事件,概率很小,但是并不代表没有。
因为全局变量容易导致代码的可复用性下降,以及对象管理的困难。试想,如果某个类使用了全局变量,则移植该类的时候,必须将全局变量也一起移植。更可怕的是,如果这个全局变量还是一个对象,并且初始化也在不同的类中实现,那么所有这些代码将被永久捆绑在一起,无法分离了。任何一个与此全局变量相关联的代码一旦有改动,即可对其他使用该变量的代码产生不可预知的影响。相较于全局变量,用户可以使用单例来替代,并且保证单例的初始化只在本类方法中实现,外部只是单纯的获取或者暂存。这种方式可以降低全局变量带来的麻烦。
使用一个get_xxx和set_xxx接口函数应该可以防止全局变量漫天飞吧。
不用全局变量也不是不可以,但是要牺牲Flash空间,多一些额外的RAM,还有多一些执行时间。一刀切也不好,本来有些芯片内存就少,不用全局怎麼办?看实际情况酌量使用也没坏处如果你还想了解更多这方面的信息,记得收藏关注本站。