例如,我有:
char query[512];
在我的应用程序中声明了大约27次连接到mysql数据库。
每次都是相同的大小,并在许多不同的功能中声明。
此应用程序永远不会使用线程。
在使用snprintf设置查询后,查询始终立即执行。 设置和执行查询之间没有任何功能可以搞乱它。
将这作为一个全局变量宣告它们的任何好处或性能提升吗?
答案 0 :(得分:3)
绝对是在消耗的内存方面。每个对象将消耗许多字节,这意味着您可能会为该特定变量使用27倍的内存。此外,创建这些对象会产生少量开销。总的来说,这不会产生显着差异,但最好在这种情况下重复使用。
答案 1 :(得分:2)
访问堆栈变量通常等同于访问已经存在于寄存器中的指针的偏移量。访问全局变量几乎总是需要首先加载全局变量的地址。
因此,如果您要选择nits,请使用堆栈变量。除非你打开了其他编译器开关,否则会增加堆栈使用的额外开销。
当然,它实际上取决于您的特定上下文(即CPU,编程语言等)。所以它可能是。
答案 2 :(得分:1)
我认为性能有一个好处,但是根据应用程序的大小,它可能可以忽略但是没有优化。 理由是使用全局变量,您可以立即声明它,因此计算机确切知道它的位置,您所做的就是更改它。否则,你必须继续重新制作它,我想象的并不像有一个可用的那样快。
答案 3 :(得分:1)
因为我知道全局变量工作就像一个缓存内存,它比其他变量访问速度快,因为它在程序开始时分配..,如果你每次分配一个新变量而不仅仅是浪费cpu循环而只是分配堆栈中变量的内存...所以用作全局变量