Skip to content

Latest commit

 

History

History
11 lines (8 loc) · 712 Bytes

stack-mem.md

File metadata and controls

11 lines (8 loc) · 712 Bytes

栈内存管理

栈内存空间的管理一般是编译器来自动分配和释放的。

其中,入参和局部变量存在于栈里(stack和heap都是动态存储区),全局变量存在于静态存储区。

go使用了 bp和sp两个寄存器,他们存储了栈的基址指针和栈顶指针

go语言的逃逸分析

  • 指向栈对象的指针不能存在于堆中;
  • 指向栈对象的指针不能在栈对象回收后存活;

编译器动态决定变量是被分配到栈里还是堆里,逃逸到堆里就是意味着指针指向的对象不会被回收,需要一直被使用,因为编译器会直接回收栈的内存对象,如果一个对象不想被回收,只能逃逸到堆中