0
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

1 回答 1

3

与您的第一个示例一样, 4 Points 将在内存中连续。如果您希望它们成为指针,那么您需要[4]*Point.

切片Point创建一个使用(指向)后备数组的切片,其中Points 将是并排的(并且[]*Point将是指向 的指针切片Point)。

请参阅http://research.swtch.com/godata以获得对 Go 数据结构的内存布局的良好解释。

于 2015-11-11T20:19:19.677 回答