先看这两个代码:

go语言的局部变量是在栈中还是堆中?

go语言的局部变量是在栈中还是堆中?

这两段代码只是调用的打印函数不一样,但是局部变量一个放在堆中,一个是放在栈中的。

直接说原因:go语言编译器会做逃逸分析,分析局部变量的作用域是否逃出了函数的作用域,要是没有就放到栈上,要是超出了函数的作用域就自动放到堆上。fmt.println函数使局部变量的作用域超出了函数的作用域,所以局部变量是在堆上。而println是内联函数,并没有使局部变量的作用域逃出函数的作用域,所以是在栈上。

相关文章:

  • 2021-11-29
  • 2021-04-19
  • 2021-10-24
  • 2021-12-20
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-16
  • 2021-07-27
  • 2022-12-23
  • 2021-12-19
  • 2022-12-23
  • 2021-11-17
相关资源
相似解决方案