【发布时间】:2016-02-29 18:49:16
【问题描述】:
我正在尝试了解 Go 的内部结构。考虑以下代码
a,b := 10,5
b,a = a,b
上面的代码完美地交换了 2 个数字,a 变为 5,b 变为 10。我无法理解这是如何工作的。考虑在第二行代码中,如果先将 a 分配给 b,那么 b 将是 10。现在如果我们将 b 分配给 a,那么 a 也不应该是 10。
请帮助我了解这是如何工作的
谢谢
【问题讨论】:
-
编译器使用寄存器作为临时存储,就像临时变量一样
-
把它变成可执行文件,然后反汇编
-
或
go tool compile -S file -
我有一个 .o 文件。有没有办法反汇编/反编译它
-
这样一个简单的程序,根本就没有
a和b这两个变量。每个引用a和b的地方都是常量10和5。即使你在a和b上加/乘一些东西,比如a += 999;b *= 999,或打印它们,例如fmt.Println(a, b)。都是常数。如今,编译器已经足够聪明了。只有在某些复杂的情况下使用变量时才会在内存中创建变量,因为它们必须创建。即使到那时,由于定义和交换之间没有代码,a和b将直接设置为5和10。
标签: go