欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在 golang 中,堆和栈有什么区别 - 堆和栈的分配

最编程 2024-06-15 20:24:27
...

变量定义完成一般是分配在堆和栈空间上的,存在哪个空间上是根据是否有动态分配内存有关(new/malloc)。

例如下面的案例

案例一

var p *int    //全局指针变量
func f(){
    var i int
    i = 1
    p = &i    //全局指针变量指向局部变量i
}
登录后复制

案例二

func f(){
    p := new(int) //局部指针变量,使用new申请的空间
    *p = 1
}
登录后复制

第一个案例中,使用var定义局部变量,但是由于i赋值给全局指针变量p,当函数结束,此时i并不会被释放,所以局部变量i是申请在堆上(程序员手动释放)。

  • 局部变量:在函数中定义的变量,它有一个动态的生命周期:每次执行的时候就创建一个新的实体,一直生存到没有人使用(例如没有外部指针指向它,函数退出的时候没有路径访问到这个变量)这个时候它占用的空间就会被回收

第二个案例中,使用new申请空间,由于退出函数后p就会被释放,所以p是申请在栈上(自动释放)

【相关推荐:Go视频教程

以上就是golang中堆与栈的区别是什么的详细内容,更多请关注php中文网其它相关文章!

推荐阅读