全局变量是否比C中的局部变量快?

use*_*544 4 c variables scope global-variables lifetime

我对此有几点想法.第一个是分配全局变量可能更快,因为它们在程序首次生成时只分配一次,而每次调用函数时都必须分配局部变量.我的第二个想法是,由于局部变量在堆栈上,它们是通过基址指针寄存器访问的,因此每次访问局部变量时,必须递减存储在基址指针中的值.全局变量可以通过数据段中的静态地址直接访问.我的想法准确吗?

小智 7

这是相当不准确的.

如果你学习计算机体系结构,你会发现最快的存储是寄存器,然后是缓存,然后是RAM.关于局部变量的事情是编译器优化它们以便在可能的情况下从寄存器中分配,或者如果不是则从缓存中分配.这就是局部变量更快的原因.

对于嵌入式系统,确定可以编译为微型内存模型,在这种情况下,您的数据段可能适合现代控制器的SRAM缓存.但在这种情况下,您的本地变量使用也会非常紧张,以至于它们可能完全在寄存器上运行.

结论:在大多数情况下,局部变量将比全局变量更快.

  • 这对编译器将优化的内容做出了一些毫无根据的假设。如果编译器发现全局变量被重复访问,那么除非它被显式标记为“易失性”,否则它很可能会像堆栈/局部变量一样将其优化到寄存器中。 (2认同)