我阅读了一些有关优化的主题,其中提到全局变量不能存储在寄存器中,因此如果我们需要优化,我们使用寄存器变量来存储全局数据并修改该寄存器变量。这也适用于静态变量吗?
对于自动存储,如果我们将自动变量存储在寄存器变量中会怎样?从寄存器而不是堆栈访问不是更快吗?
最佳答案
全局变量和静态变量都存在于数据段中,数据段包括数据段、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/