c - 全局和静态变量的优化

标签 c compiler-construction storage compiler-optimization

我阅读了一些有关优化的主题,其中提到全局变量不能存储在寄存器中,因此如果我们需要优化,我们使用寄存器变量来存储全局数据并修改该寄存器变量。这也适用于静态变量吗?

对于自动存储,如果我们将自动变量存储在寄存器变量中会怎样?从寄存器而不是堆栈访问不是更快吗?

最佳答案

全局变量和静态变量都存在于数据段中,数据段包括数据段、BSS段和堆段。如果静态变量初始化为 0 或未初始化为任何值,则它会进入 BSS 部分。如果给它一个非零初始化值,那么它位于“数据”部分。请参阅:

http://en.wikipedia.org/wiki/Data_segment

对于自动变量与寄存器变量:寄存器并不保证变量一定会存储在寄存器中,更多的是给程序员提供一个提示。请参阅:

http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/CONCEPT/storage_class.html

是的,访问寄存器比访问堆栈内存要快得多,但现在这种优化取决于编译器(寄存器分配问题)以及 CPU 架构(它具有很大的性能)。许多优化太复杂,无法在此处解释)。

除非您正在为非常简单或旧的架构进行编程和/或使用非常过时的编译器,否则您可能不应该担心这种优化。

关于c - 全局和静态变量的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20307152/

相关文章:

将十六进制字符串 (char []) 转换为 int?

C - 错误的斐波那契数

compiler-construction - 在创建 DFA 后实现识别 token 的词法分析器

c++ - 为什么不调用私有(private)成员的默认构造函数?

storage - 计算机如何区分一个整数是有符号的还是无符号的?

database - 存储网站内容 : database or file?

c - C 货币面额

c - 为什么这个 C 函数不返回整数值?

compiler-construction - 如何在编译器插件中修改 crate 的所有项目?

java - 关于数据存储的意见