说我有一个结构:
type foo struct {
}
Run Code Online (Sandbox Code Playgroud)
之间有什么区别吗
f := &foo{}
Run Code Online (Sandbox Code Playgroud)
和
f := new(foo)
Run Code Online (Sandbox Code Playgroud)
就它被编译成的机器代码而言,还是仅仅是语法上的差异?
一个更具体的问题:
至于structliteral( &foo{}
),内存可以在栈中分配,也可以在堆中分配,取决于转义分析。
但是对于new(foo)
,我不太确定:
calloc()
new()
根据我的理解,在 c 中类似于在 golang 中。但calloc()
总是在堆上分配。我想知道是否new()
总是在堆中分配?
golang 规范(https://golang.org/ref/spec#Allocation)只提到:
内置函数 new 接受类型 T,在运行时为该类型的变量分配存储空间,并返回指向它的类型 *T 的值。变量按照初始值部分中的描述进行初始化。
它没有说明new()
将在哪里分配内存。所以new()
总是在堆上分配,还是也可以在堆栈中分配——与内存分配中的结构体完全相同?
归档时间: |
|
查看次数: |
1908 次 |
最近记录: |