如何在内存中布局结构数组?

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 的切片创建一个使用(指向)支持数组的切片,其中 Points 将并排(并且 []*Point将是指向 Point).

的一片指针

有关 Go 数据结构的内存布局的详细解释,请参阅 http://research.swtch.com/godata