Go语言变量的生命周期

2023-05-16

1 变量的生命周期  
  生命周期是指程序执行过程中变量存在的时间段。下面我们分别来看看包变量(全局变量)和局部变量两种变量的生命周期。
  ① 包变量一直常驻在内存到程序的结束,然后被系统垃圾回收器回收。也就是说包变量的生命周期是整个程序的执行时间。
  ② 局部变量,例如一个函数中定义的变量。它有一个动态的生命周期:每次执行生命语句时创建一个新的实体,变量一直生存到它变得不可访问(例如没有外部指针指向它,函数退出我们没有路径能访问到这个变量),这时它占用的存储空间就会被回收。
  所以我们有结论:
  并不是定义在函数内部的局部变量在访问退出函数后就会被回收!
2 堆与栈的分配
  学过其他诸如C/C++语言的都知道,变量定义完成一般是分配在堆和栈空间上的。存在哪个空间上是跟你是否动态分配内存有关(new/malloc)。但是在Go语言上这个选择并不是基于使用var和new关键字来声明变量的。
  我们看下面两个程序实例:

var p *int    //全局指针变量
func f(){
    var i int
    i = 1
    p = &x    //全局指针变量指向局部变量i
}
func f(){
    p := new(int) //局部指针变量,使用new申请的空间
    *p = 1
}

  上面程序中,第一个程序虽然i是通过var申请的局部变量,但是由于有外部指针指向访问,我们有路径可找到这个空间(变量能够逃逸出函数),所以局部变量i是申请在堆空间上。而第二个程序中p指针变量虽然是使用new申请的空间,但是由于退出函数就没有路径可寻找到它(变量无法逃出函数),所以局部变量p是申请在栈空间上的。
  另外我需要提的一点,Go语言区别于C/C++,虽然变量申请在堆空间上,但是它有自动回收垃圾的功能,所以这些堆地址空间也无需我们手动回收,系统会在需要释放的时刻自动进行垃圾回收。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go语言变量的生命周期 的相关文章

随机推荐

  • 如何进行探索式数据分析?

    与数据同行 已开通综合 数据仓库 数据分析 产品经理 数据治理及机器学习六大专业群 xff0c 加微信号frank61822701 为好友后入群 新开招聘交流群 xff0c 请关注 与数据同行 公众号 xff0c 后台回复 招聘 后获得入群
  • Linux 移动或复制文件(文件夹)

    Linux 移动或复制文件 xff08 文件夹 xff09 命令格式 xff1a cp rf home backup default Public Public 复制 home backup default Public文件夹 到当前文件夹
  • 手把手教你配置阿里云服务器搭建网站

    写在前面 出于好奇 xff0c 我用学生优惠租了一台阿里云服务器 xff0c 打算做一些Java web的开发 xff0c 但是毕竟是第一次接触这样的东西 xff0c 还是比较懵逼 xff0c 在这个过程中遇到了一些问题 xff08 肯定会
  • Python

    人机交互 1 input 是输入函数 xff0c 会将所有输入做一个字符串类型的处理 a 61 input 作用 xff1a 显示出括号内的东西 xff0c 并要求用户输入一个东西 xff0c 赋给a 如果要有输入提示 xff0c 要在括号
  • PHP学习笔记——wampserver安装步骤

    1 wampserver的安装 安装链接 xff1a wampserver安装链接 选择 64 exe为后缀的安装包 xff08 前提是64位系统机器 xff09 选择语言 xff1a English 同意协议 next 选择安装路径 ne
  • 微博粉丝走势监控

    前言 因为之前写过很多爬虫 xff0c 然后近期也是选秀节目比较多 xff0c 像创造营 xff0c 青春有你等 一般情况下微博粉丝的增长速度是节目组比较关注的数据之一 因此 xff0c 想做一个简单的粉丝监控平台 xff0c 话不多说 x
  • ubuntu系统下各个目录的一般作用

    1 这是根目录 xff0c 一个Ubuntu系统下只有一个根目录 2 root 系统管理员的目录 3 boot 系统启动文件 4 bin 存放系统程序 5 etc 存放系统配置方面的文件 6 dev 存放与设备有观点文件 xff0c 例如
  • C/C++中枚举类型enum使用

    1 说明 xff1a 枚举enum的出现 xff0c 主要是为了解决一些特定属性的赋值 xff0c 变量取值仅在一定有限范围内的问题 例如一年只有十二个月取值 xff0c 一个星期只有七天情况 xff0c 人的性别只有男女两种等 这些属性如
  • Matlab中save实现保存数据到mat文件的正确使用

    主要需要注意save savePath A 和 save savePath 39 KSD 39 两种写法的区别 1 普通保存在当前文件夹下 save matPath mat span class hljs literal A span B
  • C/C++笔试必须熟悉掌握的头文件系列(三)——stdlib.h/cstdlib

    1 说明 stdlib h 头文件即标准库头文件 xff08 standard library xff09 xff0c stdlib 头文件里包含了C语言的最常用的系统函数 而C 43 43 中有对应相同作用的 cstdlib 头文件 xf
  • matlab图像类型转换以及uint8、double、im2double、im2uint8和mat2gray等说明

    1 matlab图像保存说明 matlab中读取图片后保存的数据是uint8类型 8位无符号整数 xff0c 即1个字节 xff0c 以此方式存储的图像称作8位图像 xff0c 好处相比较默认matlab数据类型双精度浮点double xf
  • PyCharm安装第三方库如Requests

    PyCharm安装第三方库是十分方便的 xff0c 无需pip或其他工具 xff0c 平台就自带了这个功能而且操作十分简便 如下 xff1a 注 xff1a 本人PyCharm已汉化 xff0c 若是英文版按括号中英文指示操作即可 1 打开
  • 关于django的ORM查询出来的数据格式的转换:OrderedDict类型转换为list;serializers序列化器配置字段可以为null

    目录 一 django查询的结果的类型是 xff1a OrderedDict类型 xff0c 如下 xff1a 二 serializers序列化器配置字段可以为null 一 django查询的结果的类型是 xff1a OrderedDict
  • pyCharm上解决安装不上pandas库问题

    最近在PyCharm上安装pandas库的时候 xff0c 总是安装不上 xff0c 提示好像是pip除了错误 我使用的是python 3 4版本 最后判断应该是自己pip版本应该太旧了 xff0c 最后再cmd更新了pip之后就行了 如下
  • 详细图解哈夫曼Huffman编码树

    1 引言 哈夫曼 xff08 Huffman xff09 编码算法是基于二叉树构建编码压缩结构的 xff0c 它是数据压缩中经典的一种算法 算法根据文本字符出现的频率 xff0c 重新对字符进行编码 因为为了缩短编码的长度 xff0c 我们
  • matlab生成随机数的rand、randi和randn三种形式

    matlab中关于随机数的产生有3种库函数 xff0c 下面我们来看看它们的形式 xff1a 1 rand 它是生成0 1之间 xff08 开环 xff0c 不包含0和1两个数 xff09 均匀分布的伪随机数 xff0c 也就是无穷次试验其
  • Linux解压tar.gz和tar.bz2的命令

    两者的命令主要是参数的不同 xff0c 解压tar gz和tar bz2不同压缩文件的命令如下 xff1a 1 解压tar gz文件 tar zxvf span class hljs preprocessor tar span span c
  • C/C++枚举enum分别打印输出枚举子和枚举值的方法

    关于枚举枚举的基础概念我这里不再介绍 xff0c 感兴趣的同学可以查阅另一篇博文C C 43 43 中枚举类型enum使用 这里我主要提一下在调试一个大型程序中遇到日志打印中一个关于枚举输出的小错误 我们知道枚举分为枚举子和枚举值 xff0
  • C++程序抛出异常后执行顺序

    1 析构函数中是否可以抛出异常 首先我们看一个常见的问题 xff0c 析构函数中是否可以抛出异常 答案是C 43 43 标准指明析构函数不能 也不应该抛出异常 xff01 C 43 43 异常处理模型是为C 43 43 语言量身设计的 xf
  • Go语言变量的生命周期

    1 变量的生命周期 生命周期是指程序执行过程中变量存在的时间段 下面我们分别来看看包变量 xff08 全局变量 xff09 和局部变量两种变量的生命周期 包变量一直常驻在内存到程序的结束 xff0c 然后被系统垃圾回收器回收 也就是说包变量