alp*_*pav 2 struct pointers heap-memory go
在 Go 中,获取地址并返回指向函数内局部变量的指针会导致编译器在堆上而不是堆栈上分配它,因此返回的指针仍然有效。
现在,如果我获取并返回结构成员或嵌入结构的地址,会发生什么?
type A struct {
a,b,c int
}
type B struct {
A
d,e,f int
}
func (b *B) get1() *A {
return &b.A
}
func (b *B) get2() *A {
localB := B{}
return &localB.A
}
Run Code Online (Sandbox Code Playgroud)
编译器会在堆上分配嵌入式结构 A 并将 B 的成员保留在堆栈上吗?
即使 localB.A 引用仍在使用中,垃圾收集器也会收集 localB 吗?
如果通过反射访问嵌入结构,编译器如何确定何时将嵌入结构保留在堆栈或堆上?
| 归档时间: |
|
| 查看次数: |
1055 次 |
| 最近记录: |