C/C++编译器关于变量作用域的优化
C/C++ Compiler Optimization regarding Variable Scope
我不确定源代码,但我目前的知识是,C/C++函数的局部变量是在函数的入口初始化的。但我也能读到,声明尽可能接近其使用的变量将有助于编译器优化代码。我对这两个相互矛盾的论点感到很困惑。
ps。我问的是机器如何处理代码,而不是人类。
编辑:为了澄清我的问题,如果函数的所有局部变量都在函数的入口初始化,那么在函数体中间声明变量除了更好的可读性之外没有其他好处。然而,我也读到,声明接近其用途的变量有助于编译器进行优化。我很难理解这两个相互矛盾的论点是如何结合在一起的。任何解释都会有所帮助。
在C++中,如果您声明最接近用法,那么如果没有达到该范围,则有可能根本无法构建变量。
class SomeHeavyObjectToConstruct { //...};
版本1:
SomeHeavyObjectToConstruct obj1;
if (some_condition) {
// do something with obj1
} else {
// won't touch obj1
}
版本2:
if (some_condition) {
SomeHeavyObjectToConstruct obj1;
// do something with obj1
} else {
// won't touch obj1
}
这样,版本2比版本1的性能更好
我没有检查过真实的案例,但我对编译器优化的理解告诉我:
- 编译器足够聪明,可以跟踪数据依赖关系并判断何时需要变量
- 自动变量不会在进入函数时初始化,而是在需要时稍后初始化
- 变量声明放在源代码中的位置不会有任何影响
相关文章:
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 未在此作用域中声明的函数和变量 (C++)
- 如何在C++中访问作用域的变量输出?
- 不同块作用域中的 C++ 变量具有相同的地址
- C++If语句变量作用域
- 派生类变量作用域 c++
- 如何理解C++变量作用域规则
- C/C++编译器关于变量作用域的优化
- 应用程序有2个静态变量作用域
- 堆变量作用域
- c++中变量作用域的机制
- c++变量作用域的类友
- 函数所需的总堆栈大小如何与变量作用域相关
- 声明友元函数时出现变量作用域错误
- 引用的C++变量作用域
- c++中的变量作用域
- c/c++中局部变量作用域和生命周期的混淆
- c++中的局部/静态变量作用域
- 多个c++文件和变量作用域