说我有一个结构:
type foo struct {
}
之间有什么区别吗?
f := &foo{}
和
f := new(foo)
就其编译的机器代码而言,或者仅仅是语法差异?
更具体的问题:
至于struct literal(&foo{}
),内存可以在堆栈或堆中分配,取决于转义分析。
但对于new(foo)
,我不太确定:
calloc()
与golang中的new()
类似。但是calloc()
总是在堆上分配。我想知道new()
是否总是在堆中分配?
golang规范(https://golang.org/ref/spec#Allocation)仅提及:
内置函数new采用类型T,为a分配存储空间 运行时该类型的变量,并返回类型* T的值 指着它。该变量按照中所述进行初始化 关于初始值的部分。
它没有说明new()
将分配内存的位置。那么new()
总是在堆上分配,或者它也可以在堆栈中分配 - 与内存分配中的struct literal完全相同?