zoukankan      html  css  js  c++  java
  • Golang的值类型和引用类型的范围、存储区域、区别

    常见的值类型和引用类型分别有哪些?

    值类型:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体struct,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值通常存储在栈中。

    引用类型:指针、slice切片、map、管道chan、interface 等都是引用类型

    数据存储的两大块:栈和堆

    在内存里分成两大块,栈和堆,值类型的变量通常存储在栈区,引用类型通常存储在堆区,在golang中,但有可能值类型也存储在堆区,反过来也有可能引用类型存储在栈区。

    两种类型的区别(拷贝操作和函数传参)

    值类型:值类型的变量通常在栈中分配。当使用等号=将一个变量的值赋给另一个变量时,如num=100, j = num,实际上是在内存中将num的值进行了拷贝。可以通过 &i 获取变量 i 的内存地址。  值拷贝

    引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由GC来回收。 

    引用类型拥有更复杂的存储结构:(1)分配内存 (2)初始化一系列属性等一个引用类型的变量r1存储的是r1的值所在的内存地址(数字),或内存地址中第一个数字所在的位置,这个内存地址被称之为指针,这个指针实际上也被存在另外的某一个数字中。 可以看本篇文章了解Golang指针基本介绍及使用案例

  • 相关阅读:
    各种骚操作线段树
    CCPC qinhuangdao
    ACM ICPC 2017 Warmup Contest 3
    ACM ICPC 2017 Warmup Contest 2[菜鸡选手的成长]
    树状数组总结篇
    XDOJ 1152: 数据库查询
    POJ 1511Invitation Cards
    React非受控组件
    React 组件优化之函数防抖节流---使用 debounce +throttle 函数
    React脚手架工程化项目里ServiceWorker.js文件作用
  • 原文地址:https://www.cnblogs.com/wt645631686/p/9476561.html
Copyright © 2011-2022 走看看