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()
将如何在内存中布置 slice ?
make([]Point, 10)
最佳答案
这 4 个 Point
在内存中是连续的,就像您的第一个示例一样。如果您希望它们成为指针,那么您需要 [4]*Point
。
Point
slice 创建一个使用(指向)后备数组的 slice ,其中 Point
将并排(并且 []*Point
将是指向 Point
的指针的一部分。
参见 http://research.swtch.com/godata很好地解释了 Go 数据结构的内存布局。
关于arrays - 如何在内存中布局结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33658987/