表达式后的 "local" var 会怎样?

what happens to a "local" var after expression?

注意:"local" 含义包含在 {}

func 表达后 localVar 会怎样?

var constantVarHolder = Int()

func NameOfFunc(){
    var localVar = Int()
    if X = 0 {
        localVar = 3
    }
    else {
        localVar = 4
    }
    constantVarHolder = localVar
}

它是否会取消初始化,不再使用任何内存或 CPU?


我明白如果我将代码更改为..

var singleVar = Int()

func NameOfFunc() {
    if X = 0 {
        singleVar = 3
    }
    else {
        singleVar = 4
    }
}

..会在 func 表达式的持续时间内加快计时和内存使用。


但是在 func 完成后,这两个代码会让您的系统处于相同的状态吗?

你的第一个例子没有做你期望的事情(你在跟踪 localVar)。但我假设你真的是这个意思:

var constantVarHolder = Int()

func NameOfFunc(){
    var localVar = Int()
    if X = 0 {
       localVar = 3
    }
    else {
        localVar = 4
    }
    constantVarHolder = localVar
}

简短的回答是优化器可以自由地以逻辑上相同的方式重写您的代码,因此您断言第二个版本会比第一个版本更快(正如我给出的那样)是不正确的.它们很容易是相同的。编译器可以自由地将局部变量分配给寄存器,因此可能根本不会使用 RAM。这些变量在任何情况下都会存储在堆栈中,但对于这种情况真的无关紧要。

你关于 "CPU" 的问题在这种情况下根本没有意义。变量不使用 CPU 时间。计算确实如此。

"leave your system in identical states" 是一个过于宽泛的术语。几乎可以肯定,该州在某些方面会有所不同。但是,是的,在任何一种情况下,全局变量都将具有相同的值(假设您按照我提供的方式编写代码),并且所有局部变量都将被释放(如果它们曾经存在,这是不太可能的)。

很难想象这个问题在什么情况下有用。即使优化器不删除本地堆栈变量,将立即值移动到堆栈然后从堆栈复制到 RAM 的任何微小时间差与首先调用函数的成本相比都相形见绌(假设它是'不内联)。如果您认真地尝试加速此功能,那您就完全错了。

也就是说,回答您的问题的方法是查看程序集输出。在Xcode中打开辅助编辑器,select"Assembly"然后select在底部"Profile"或"Release"这样就优化好了。如果您关心这种优化级别,您需要习惯阅读该输出,以便您可以看到实际的代码 运行.