zoukankan      html  css  js  c++  java
  • go语言学习之路五:Go语言内存分配机制make&new

    Go有两种分配内存的机制,规则很简单,下面来简单介绍一下。
    1、new函数
    New()函数可以给一个值类型的数据分配内存(不知道什么是值类型请前往切片那一部分),调用成功后返回一个初始化的内存块指针,同时该类型被初始化为0值,原型定义:
    func new(Type) * Type
    new是一个分配内存的内置函数,但是不同于其他语言中new所做的工作,它只是将内存清零,而不是初始化内存。
    2、make函数
    Make()函数用于给引用类型分配内存空间,比如:slice,map,channal等,这里需要注意的一点是make()创建的是一个引用类型的对象,而不是一个内存空间的指针。Make()函数原型:
    func make(Type,size IntegerType)Type
    参数Type必须是一个引用类型(slice,map,channal);参数IntegerType指定要创建的该对象的个数。和new不同的是make调用成功是返回一个对象,而不是一个内存空间的指针。
    new 的作用是初始化一个指向类型的指针(*T),make 的作用是为 slice,map 或 chan 初始化并返回引用(T)
    package main

    import (
    "fmt"
    )

    func main() {
    p := new([]int)
    fmt.Println(p)     //输出&[],p本身是一个地址
    s := make([]int, 1)
    fmt.Println(s)     //输出[0],s本身是一个slice对象,其内容默认为0
    }
    通过这个例子可以看出,当对slice,map以及channel进行初始化时,使用make比new方式要好,而其他形式的则利用new进行初始化

  • 相关阅读:
    c# 发送邮件笔记(一)
    windows API(一)
    SubSonic3.0安装
    Node.js安装MongoDB驱动
    JDBC连接数据库方法
    Delphi LiveBindings如何绑定一个对象(二)(转)
    delphi RTTI机制学习(一)
    Delphi LiveBinds组件
    mysql 每个分类各取5条
    mysql in(...) 1次取出当前记录及上1条下1条记录, 且使用了主键作为索引
  • 原文地址:https://www.cnblogs.com/chase-wind/p/5629002.html
Copyright © 2011-2022 走看看