zoukankan      html  css  js  c++  java
  • go:内存分配

    1. new 和 make

      二者都是在堆上分配内存,但是它们的行为不同,适用于不同的类型;

      new 函数分配内存,make 函数初始化;

      new(T) :为类型T分配一块内存,并返回指向这块内存地址的指针,它适用于值类型如数组和结构体;

      make(T) :初始化内置的数据结构,返回一个类型为 T 的空值,它只适用于3种内建的引用类型:slice、map 和 channel;

      如果你错误的使用 new() 分配了一个引用对象,你会获得一个空引用的指针,相当于声明了一个未初始化的变量并且取了它的地址;

    1.1 两个在内存中的区别

      new([]int) 指向一个值为空的地址;

      make([]int,0) 指向一个空数组;

      

    1.2 如何理解new、make、slice、map、channel的关系

      1.slice、map以及channel都是golang内建的一种引用类型,三者在内存中存在多个组成部分, 需要对内存组成部分初始化后才能使用,而make就是对三者进行初始化的一种操作方式;

      2. new 获取的是存储指定变量内存地址的一个变量,对于变量内部结构并不会执行相应的初始化操作, 所以slice、map、channel需要make进行初始化并获取对应的内存地址,而非new简单的获取内存地址;

    2. 字符串的内存结构

      字符串 s:= "hello" 的内存结构

      

    3. 值类型和指针类型的内存分配

      值类型的内存在栈上分配;

      指针类型的内存在堆上分配;

  • 相关阅读:
    产品易用性
    优化Compress components with gzip 问题
    转:稳定性测试
    Xray CA证书
    转:获取WEB各阶段响应时间
    测试用例编写注意事项
    用dd把一个空硬盘写满
    转:linux终端命令使用cpu负载到100
    JMeter命令行执行+生成HTML报告
    防F12扒代码:按下F12关闭当前页面
  • 原文地址:https://www.cnblogs.com/virgosnail/p/12936862.html
Copyright © 2011-2022 走看看