gpt4 book ai didi

c - 在为 ARM7 编译的 C 代码中,使用全局变量会提高还是降低性能?

转载 作者:行者123 更新时间:2023-12-01 08:55:56 26 4
gpt4 key购买 nike

在为 ARM7 嵌入式平台编译时,在 C 代码中使用大量全局变量会降低还是提高性能?

代码库由多个 C 源代码文件组成,它们使用 extern 关键字引用彼此的全局变量。来自不同源代码文件的不同函数引用不同的全局变量。一些变量是数组。

我使用的编译器是 IAR 的 EW ARM kickstart edition (32kb)。

最佳答案

static 相比,这总是会降低性能并增加程序大小。变量。你的问题没有具体问什么你正在比较。我可以看到各种替代方案,

  • 与静态变量相比。
  • 与按值传递的参数相比。
  • 与传递的数组或结构指针中的值相对。

  • ARM blog详细说明如何将常量加载到 arm 寄存器。必须始终执行此步骤以获取全局变量的地址。编译器不会事先知道全局有多远。如果您将 gcc 与 -lto 一起使用或使用类似整体程序的东西,然后可以执行更好的优化。基本上,这些会将全局转换为静态。

    在这里,编译器可能会保存一个带有全局基地址的寄存器,然后使用偏移量加载不同的变量;如 ldr rN, [rX, #offset] .也就是说,如果你幸运的话。

    RISC CPU 的设计,如 ARM,支持处理所有内存访问的加载/存储单元。通常,加载/存储指令能够使用 [register + offset]形式。此外,所有 RISC 寄存器都是近似对称的。这意味着任何寄存器都可以用于此偏移访问。通常,如果您通过 struct或者数组指针作为参数,那么就变成了一样的东西。即 ldr rN, [rX, #offset] .

    现在,参数的优点是最终,您的例程可以通过传递不同的指针来支持多个数组或结构。此外,它还为您提供了将公共(public)数据分组在一起的优势,从而带来了缓存优势。

    我认为全局变量对 ARM 是有害的。你应该只使用全局指针,你的代码需要一个单例。或者你有某种同步内存。即,全局变量应该只用于全局功能而不是数据。

    通过堆栈传递所有值显然效率低下,并且会丢失内存引用或指针的值。

    关于c - 在为 ARM7 编译的 C 代码中,使用全局变量会提高还是降低性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23834823/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com