嵌入式系统中全局变量和局部变量的性能差异

问题描述 投票:0回答:1

在嵌入式系统(我使用 C++ 和 Arduino)中,在连续重复的主循环()中,每次定义一个临时变量还是定义一次全局变量并在每次迭代中更新它是否更有效?

解决方案1

int temporary_variable_global = 0;

void loop() {
  //... Imagine having the codes above ...

  temporary_variable_global = x + 3;

  //... Imagine having the codes below ...
}

解决方案2

void loop() {
  //... Imagine having the codes above ...

  int temporary_variable_local = x + 3;

 //... Imagine having the codes below ...
}

哪种解决方案在性能和执行时间方面更好?我用谷歌搜索了这个问题,但找不到明确的答案。

注意:我并不是在寻找桌面程序或网络问题的答案。仅适用于嵌入式系统。

performance arduino embedded
1个回答
0
投票

解决此类问题的最终方法是查看生成的机器代码。我把这个留给你作为练习。您的发现仅适用于使用具有特定标志的特定编译器编译的特定程序。你可能无法概括它,所以很明显你找不到“明确的答案。

但是,以下是基于 AVR 的 GCC 的个人经验的抽象视图,有时在 Arduino 上,但也基于“纯金属”。缺乏学术考量,谨慎对待。

全局变量通常分配在内存中。然而,使用修饰符

static
来限制翻译单元的范围,一些智能编译器可能会决定将其放置在寄存器中。

局部变量很可能被保存在寄存器中。这在很大程度上取决于其他变量的数量、潜在的内联函数和计算必要性,至少。

寄存器的访问比存储单元的访问更快。

因此,我想说局部变量不会更慢,但通常会更快。

© www.soinside.com 2019 - 2024. All rights reserved.