码迷,mamicode.com
首页 > 其他好文 > 详细

GO make&new区别

时间:2017-05-23 11:25:19      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:内存   返回   函数   ase   一点   使用   highlight   语言   lan   

自:http://www.cnblogs.com/ghj1976/archive/2013/02/12/2910384.html

1、make用于内建类型(map、slice 和channel)的内存分配。new用于各种类型的内存分配。

2、new本质上说跟其它语言中的同名函数功能一样:new(T)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*T类型的值。用Go的术语说,它返回了一个指针,指向新分配的类型T的零值。有一点非常重要:new返回指针。


3、make(T, args)与new(T)有着不同的功能,make只能创建slice、map和channel,并且返回一个有初始值(非零)的T类型(引用),而不是*T。

4、本质来讲,导致这三个内建类型有所不同的原因是:引用在使用前必须被初始化。例如,一个slice,是一个包含指向数据(内部array)的指针、长度和容量的三项描述符;在这些项目被初始化之前,slice为nil。对于slice、map和channel来说,make初始化了内部的数据结构,填充适当的值。make返回初始化后的(非零)值。

5、故make 是内建类型初始化的方法,例如:s :=make([]int,len,cap)  //这个切片在元素在超过10个时,底层将会发生至少一次的内存移动动作

    1. //创建一个初始元素个数为5的数组切片,元素初始值为0,并预留10个元素的存储空间  
    2. b := make([]int, 5, 10) // len(b)=5, cap(b)=10  
    3. //继续切片,注意len和cap的变化  
    4. b = b[:cap(b)] // len(b)=5, cap(b)=5  
    5. b = b[1:]      // len(b)=4, cap(b)=4  

GO make&new区别

标签:内存   返回   函数   ase   一点   使用   highlight   语言   lan   

原文地址:http://www.cnblogs.com/sysnap/p/6892921.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!