golang new()vs struct literal之间的区别,特别是在内存分配方面

时间:2017-04-29 17:21:07

标签: go

说我有一个结构:

type foo struct {
}

之间有什么区别吗?
f := &foo{}

f := new(foo)

就其编译的机器代码而言,或者仅仅是语法差异?

更具体的问题:

至于struct literal(&foo{}),内存可以在堆栈或堆中分配,取决于转义分析。

但对于new(foo),我不太确定:

根据我的理解,c中的

calloc()与golang中的new()类似。但是calloc()总是在堆上分配。我想知道new()是否总是在堆中分配?

golang规范(https://golang.org/ref/spec#Allocation)仅提及:

  

内置函数new采用类型T,为a分配存储空间   运行时该类型的变量,并返回类型* T的值   指着它。该变量按照中所述进行初始化   关于初始值的部分。

它没有说明new()将分配内存的位置。那么new()总是在堆上分配,或者它也可以在堆栈中分配 - 与内存分配中的struct literal完全相同?

0 个答案:

没有答案