slice分配在堆上还是栈上

参考解析

题目来源:京东

答案:

有可能分配到栈上,也有可能分配到栈上。当开辟切片空间较大时,会逃逸到堆上。

通过命令go build -gcflags "-m -l" xxx.go观察golang是如何进行逃逸分析的

  1. package main
  2. func main() {
  3. _ = make([]string, 200) //1
  4. //_ = make([]string, 20000) //2
  5. }
  6. //output
  7. //1. make([]string, 200) does not escape
  8. //2. make([]string, 20000) escapes to heap