如何在内存中布局结构数组?
How does go layout arrays of structs in memory?
type Point struct {
x, y int
}
var arr [4]Point
数组在内存中如何布局?
实物会并排摆放吗
[Point[x][y]][Point[x][y]][Point[x][y]][Point[x][y]]
或者数组是指针数组,对象存储在别处,如 Java?
[&Point0][&Point1][&Point2][&Point3]
堆中某处:
...[Point0[x][y]] ... [Point1[x][y]] .... [Point3[x][y]] ... [Point2[x][y]]
此外,make()
如何在内存中布置切片?
make([]Point, 10)
这 4 个 Point
在内存中是连续的,就像您的第一个示例一样。如果你想让它们成为指针,那么你需要 [4]*Point
.
Point
的切片创建一个使用(指向)支持数组的切片,其中 Point
s 将并排(并且 []*Point
将是指向 Point
).
的一片指针
有关 Go 数据结构的内存布局的详细解释,请参阅 http://research.swtch.com/godata。
type Point struct {
x, y int
}
var arr [4]Point
数组在内存中如何布局?
实物会并排摆放吗
[Point[x][y]][Point[x][y]][Point[x][y]][Point[x][y]]
或者数组是指针数组,对象存储在别处,如 Java?
[&Point0][&Point1][&Point2][&Point3]
堆中某处:
...[Point0[x][y]] ... [Point1[x][y]] .... [Point3[x][y]] ... [Point2[x][y]]
此外,make()
如何在内存中布置切片?
make([]Point, 10)
这 4 个 Point
在内存中是连续的,就像您的第一个示例一样。如果你想让它们成为指针,那么你需要 [4]*Point
.
Point
的切片创建一个使用(指向)支持数组的切片,其中 Point
s 将并排(并且 []*Point
将是指向 Point
).
有关 Go 数据结构的内存布局的详细解释,请参阅 http://research.swtch.com/godata。