gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 13:13:55 24 4
gpt4 key购买 nike

注意:“本地”的含义包含在 {}

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 时间。计算确实如此。

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

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

也就是说,回答您的问题的方法是查看程序集输出。在 Xcode 中,打开 Assistant Editor,然后选择“Assembly”,然后选择底部的“Profile”或“Release”进行优化。如果您关心此级别的优化,则需要习惯阅读该输出,以便了解实际运行的代码。

关于swift - 表达式后的 "local"var 会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30063257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com