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

标签 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() 将如何在内存中布置 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/

相关文章:

c - 如何初始化一个未知长度的数组?

c++ - for 循环只打印一半的值(使用 vector )

C Lib 设计 - 结构和内存管理 [最佳实践]

C++ 映射插入

c - 段错误。为结构体中的结构体分配内存

c - 关于内存对齐的一些困惑

mysql - 获取数据库中相似行的数量并在表单中单独显示它们

arrays - Swift 3 - 如何初始化多维字符串数组?

php - 在mysql数据库中插入和获取不同的语言

c++ - 将结构添加到数组中