这段代码安全吗?b在if块结束时被取消范围,但a仍然指向b的内存地址。在这个简单的示例中,它似乎可以工作(它打印正确的值),但是在语言规范中,这将始终有效?
使用 -m 编译以检查编译器优化,它说b不会逃逸到堆中。
游乐场:http : //play.golang.org/p/ZzYkMg6FqB
package main
import "fmt"
func main() {
a := new(int)
*a = 10
if *a > 0 {
b := 5
a = &b
}
fmt.Println(*a)
}
浮云间
噜噜哒
相关分类