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

时间:2015-11-11 20:10:32

标签: arrays memory struct go memory-layout

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)

1 个答案:

答案 0 :(得分:2)

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

Point切片会创建一个使用(指向)支持数组的切片,其中,Point s将并排(并且[]*Point将是一段指向Point)的指针。

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