gpt4 book ai didi

c - 就 C 中的速度和空间消耗而言,静态与全局

转载 作者:太空狗 更新时间:2023-10-29 17:17:40 25 4
gpt4 key购买 nike

我想知道静态变量和全局变量在访问速度空间消耗方面的区别。 (如果你想了解我的平台:Windows 上的 gcc 编译器。(我正在使用 Cygwin 和 Triton IDE 在 Windows 上进行 ARM7 嵌入式编程。Triton 在 Java 平台上带有 gcc 编译器,可以在 Windows 上运行。))

(显然我从 this question 知道文件和函数范围)

编辑:好的,在任何微 Controller /处理器环境下给我一个答案。

最佳答案

空间没有区别,它们占用的空间相同。

但是有一个速度差异:静态更快。

当然变量的内存访问对于全局和静态来说是一样的。但是当你有静态时,编译器可以优化。当它编译一个模块时,它知道对模块外部函数的任何函数调用都不能更改静态变量。所以它确切地知道发生了什么并且可以例如通过函数调用将其保存在寄存器中。当它是全局的并且您从不同的模块调用函数时,编译器无法知道它做了什么。因此,他必须假设该函数访问变量并更改它,从而导致存储和重新加载。

使用 gcc,您可以同时传递所有 .c 源代码,因此它还可以查看在对来自不同模块的函数进行函数调用时发生了什么。要使其正常工作,除了所有 .c 文件外,您还必须同时传递 -combine-fwhole-program-fwhole-program 使所有全局静态(不是模块静态而是编译单元静态,即所有给定的 .c 文件在一起)。 -combine 进行模块间分析。

关于c - 就 C 中的速度和空间消耗而言,静态与全局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/323094/

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