【问题标题】:Are there any benefits to declaring a commonly declared variable as a global?将通常声明的变量声明为全局变量有什么好处吗?
【发布时间】:2011-10-13 21:27:58
【问题描述】:
例如,我有:
char query[512];
在我连接到 mysql 数据库的应用程序中声明了大约 27 次。
每次大小相同,并在许多不同的函数中声明。
此应用程序永远不会使用线程。
查询总是在使用 snprintf 设置查询后立即执行。
在设置和查询执行之间没有任何功能可以搞砸。
将其声明为全局变量是否有任何好处或性能提升?
【问题讨论】:
标签:
performance
optimization
memory
global-variables
【解决方案1】:
当然,就内存消耗而言。每个对象将消耗大量字节,这意味着您可能会为该特定变量使用少 27 倍的内存。此外,创建这些对象会产生少量开销。总的来说,这不会产生重大影响,但在这种情况下重用是最佳实践。
【解决方案2】:
访问堆栈变量通常等同于访问寄存器中已有指针的偏移量。访问全局变量几乎总是需要先加载全局变量的地址。
因此,如果您要选择 nits,请使用堆栈变量。除非您打开了其他编译器开关,否则会增加堆栈使用的额外开销。
当然,这实际上取决于您的特定环境(即 CPU、编程语言等)。所以也可以。
【解决方案3】:
我会说性能有好处,但是根据应用程序的大小,它可能可以忽略不计,但并未优化。
原因是使用一个全局变量,您立即声明它一次,这样计算机就知道它在哪里,而您所做的就是更改它。否则,你必须不断地重新制作它,我想它不会像总有一个可用的那么快。
【解决方案4】:
据我所知,全局变量的工作方式类似于缓存内存,它比其他变量访问速度更快,因为它在程序开始时分配..,如果您每次分配一个新变量,而不是仅仅浪费 CPU 周期内存到堆栈中的变量...所以用作全局变量