表达式后的 "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"这样就优化好了。如果您关心这种优化级别,您需要习惯阅读该输出,以便您可以看到实际的代码 运行.
注意:"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"这样就优化好了。如果您关心这种优化级别,您需要习惯阅读该输出,以便您可以看到实际的代码 运行.