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

标签 c variables scope global-variables lifetime

<分区>

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

最佳答案

这是相当不准确的。

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

对于嵌入式系统,确保可以编译为微型内存模型,在这种情况下,您的数据段可能适合现代 Controller 的 SRAM 缓存。但在这种情况下,您的局部变量使用也会非常严格,以至于它们可能完全在寄存器上运行。

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

关于c - 全局变量是否比 C 中的局部变量快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41147208/

相关文章:

c - 如何在 C 中将多个列表(hlist)作为函数参数传递

c - 如何正确写入套接字

c++ - `#define` 宏中的 pragma 以禁用警告

javascript - 如何手动通过 Youtube API 发送消息?

python - 有没有办法在Python中实现全局计算属性?

javascript - 番茄钟休息计时器未启动

powershell - 在本地运行时,Invoke-Command是否在当前作用域或子作用域中运行?

c - 在 #if 语句中使用宏时打印弃用警告

javascript - 访问 "Parent Scope"

c++ - C++ 中的 Objective C——超出范围