<分区>
我对此有一些想法。首先是分配全局变量可能更快,因为它们只分配一次,在程序首次生成时,而局部变量必须在每次调用函数时分配。我的第二个想法是,由于局部变量在堆栈上,它们是通过基指针寄存器访问的,因此每次访问局部变量时,基指针中存储的值必须递减;全局变量通过数据段中的静态地址直接访问。我的想法准确吗?
<分区>
我对此有一些想法。首先是分配全局变量可能更快,因为它们只分配一次,在程序首次生成时,而局部变量必须在每次调用函数时分配。我的第二个想法是,由于局部变量在堆栈上,它们是通过基指针寄存器访问的,因此每次访问局部变量时,基指针中存储的值必须递减;全局变量通过数据段中的静态地址直接访问。我的想法准确吗?
最佳答案
这是相当不准确的。
如果你研究计算机体系结构,你会发现最快的存储是寄存器,其次是高速缓存,然后是 RAM。关于局部变量的事情是,编译器会优化它们,以便在可能的情况下从寄存器中分配,否则从缓存中分配。这就是局部变量更快的原因。
对于嵌入式系统,确保可以编译为微型内存模型,在这种情况下,您的数据段可能适合现代 Controller 的 SRAM 缓存。但在这种情况下,您的局部变量使用也会非常严格,以至于它们可能完全在寄存器上运行。
结论:在大多数情况下,局部变量会比全局变量更快。
关于c - 全局变量是否比 C 中的局部变量快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41147208/