9.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进行初始化

2021342-e1846468b57bb93c.png

转载于:https://www.jianshu.com/p/dc5f75a03a40

猜你喜欢

转载自blog.csdn.net/weixin_33755847/article/details/91334981